Post-quantum asymmetric key cryptosystem with one-to-many distributed key management based on prime modulo double encapsulation

11218308 · 2022-01-04

Assignee

Inventors

Cpc classification

International classification

Abstract

In a post-quantum asymmetric key generation method and system, a processing unit generates, based on a prime and an arithmetic function or a classical string, a prime vector which has an infinite number of components; generates a prime array based on the prime vector; generates an associated matrix based on the prime array; obtains, based on the associated matrix and a first reference prime, a first reference inverse prime array that serves as a private key; and obtains a public key that is paired with the private key based on a second reference inverse prime array. The second reference inverse prime array is obtained based on the associated matrix, the first reference prime, a second reference prime, and a randomization array.

Claims

1. A post-quantum asymmetric key generation method, comprising: A) generating, by a first processor of a key server of an encrypted communication system, based on a prime p and one of an arithmetic function and a classical string that serves as a seed, a p-vector {right arrow over (ƒ)}.sub.p that relates to the prime p and that has an infinite number of components, wherein the p-vector {right arrow over (ƒ)}.sub.p is defined as:
{right arrow over (ƒ)}.sub.p:=[ƒ(p.sup.0),ƒ(p.sup.1),ƒ(p.sup.2),ƒ(p.sup.3), . . . ] where ƒ represents said one of the arithmetic function and the classical string that serves as the seed; B) generating, by the first processor, based on the p-vector a {right arrow over (ƒ)}.sub.p, a p-array custom character.sub.p|.sub.s,t.sup.m that has m number of components and that relates to the prime p and that is defined as: p .Math. s , t m := .Math. i = 0 t [ f ( p s + im ) , .Math. , f ( p s + im + ( m - 1 ) ) ] , where each of parameters m, s and t is a user-defined positive integer, and the prime p and the parameters s, t cooperatively compose a first parameter set I, and wherein the p-array custom character.sub.p|.sub.s,t.sup.m is also represented as custom character|.sup.m; C) based on the p-array custom character|.sup.m, generating, by the first processor, an associated matrix [custom character|.sup.m] that is defined as: [ .Math. m ] = ( .Math. m ( 0 ) .Math. m ( 1 ) .Math. .Math. m ( m - 1 ) .Math. m ( m - 1 ) .Math. m ( 0 ) .Math. .Math. m ( m - 2 ) .Math. .Math. .Math. .Math. m ( 1 ) .Math. m ( 2 ) .Math. .Math. m ( 0 ) ) , where custom character|.sup.m(j) represents a (j+1).sup.th one of the m number of components of the p-array, 0≤j≤(m−1); D) based on the associated matrix [custom character|.sup.m] and a modulus I which is a user-defined positive integer, generating, by the first processor, an inverse p-array custom character.sub.l|.sup.m with respect to the modulus I, which is defined as:
custom character.sub.l|.sup.m:=(L.sub.l[1,0, . . . ,0][custom character|.sup.m]*)(mod l) where L.sub.l represents an inverse modulus of a determinant of the associated matrix [custom character|.sup.m] with respect to the modulus I, and is defined as: L.sub.l:=(det[custom character|.sup.m]).sup.−1 (mod l), and [custom character|.sup.m]* represents an adjoint matrix of the associated matrix [custom character|.sup.m]; E) arbitrarily selecting, by the first processor, a first reference prime p.sub.1, and determining a second reference prime p.sub.2 based on a predetermined criterion that relates to the first reference prime p.sub.1, a greatest one of the m number of components of the p-array custom character|.sup.m which is denoted by b, a first reference positive integer ã, and a second parameter set S that is composed of the parameter m, a second reference positive integer {tilde over (b)} and a third reference positive integer r, wherein the predetermined criterion includes p.sub.2>max(p.sub.1mã{tilde over (b)},mbr); F) acquiring, by the first processor, a first reference inverse p-array custom character.sub.p.sub.1|.sup.m and a second reference inverse p-array by custom character.sub.p.sub.2|.sup.m respectively making the first reference prime p.sub.1 and the second reference prime p.sub.2 serve as the modulus I in the inverse p-array custom character.sub.l|.sup.m, the first reference inverse p-array custom charactercustom character.sub.p.sub.1|.sup.m serving as a private key K.sub.private, which is defined as K.sub.private=(custom character|.sup.m,p.sub.1,ã); and G) generating, by the first processor, a public key K.sub.public with respect to a key-generation randomization array custom character|.sub.(ã).sup.m based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, the second reference prime p.sub.2, and the key-generation randomization array custom character|.sub.(ã).sup.m, wherein the key-generation randomization array custom character|.sub.(ã).sup.m has m number of numerical components between 0 and the first reference positive integer ã and the public key K.sub.public is paired with the private key K.sub.private, and is an array custom character.sub.public|.sup.m that includes m number of numerical components and that is also denoted as K.sub.public=(custom character.sub.public|.sup.m,p.sub.2), representing custom character.sub.public|.sup.m:=Rand(custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) (mod p.sub.2); wherein Rand(custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) is a key-generation randomization function of the second reference inverse p-array custom character.sub.p.sub.2|.sup.m with respect to the key-generation randomization array custom character|.sub.(ã).sup.m, and is defined as Rand(custom character.sub.p.sub.2|.sup.m,p.sub.1,ã)=p.sub.1(custom character.sub.p.sub.2|.sup.m{circle around (*)}custom character|.sub.(ã).sup.m), where {circle around (*)} represents a convolution multiplication operator; whereby the public key K.sub.public and the private key K.sub.private are generated based on the arithmetic function and the classical string, the p-vector {right arrow over (ƒ)}.sub.p, and the p-array, thereby increasing speeds of encryption and decryption of the encrypted communication system; the method further comprising: using, by a second processor of a transmitter of the encrypted communication system, the public key K.sub.public, the second reference prime p.sub.2, and an encryption randomization array custom character|.sub.({tilde over (b)}).sup.m that has m number of numerical components between 0 and the second reference positive integer {tilde over (b)} to perform an encryption procedure on a data array custom character|.sup.m that corresponds to a plaintext to be transmitted and that has m number of numerical components, and acquiring, by the second processor, a ciphertext custom character|.sup.m with respect to the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m, wherein the ciphertext custom character|.sup.m has m number of encrypted numerical components; and transmitting, from the transmitter, the ciphertext custom character|.sup.m to a receiver of the encrypted communication system via a communication channel.

2. The method of claim 1, wherein the plaintext has m number of characters, and each of the m number of numerical components of the data array custom character|.sup.m is between 0 and the first reference positive integer ã, and represents a corresponding one of the m number of characters of the plaintext.

3. The encryption method of claim 1, wherein the encryption procedure includes: generating, by the second processor, based on the public key K.sub.public and the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m, an encryption randomization function custom character|.sup.m that is defined as custom character|.sup.m:=Rand(custom character.sub.public|.sup.m,1,{tilde over (b)}); and acquiring, by the second processor, the ciphertext custom character|.sup.m by performing, by the second processor, modulo operation on a sum of the data array custom character|.sup.m and the encryption randomization function custom character|.sup.m modulo the second reference prime p.sub.2, the ciphertext custom character|.sup.m being represented by custom character|.sup.m:=(custom character|.sup.m+custom character|.sup.m) (mod p.sub.2).

4. The method of claim 1, further comprising: using, by a third processor of the receiver of the encrypted communication system, the p-array custom character|.sup.m, the private key K.sub.private, the first reference prime p.sub.1 and the second reference prime p.sub.2 to perform a decryption procedure on the ciphertext custom character|.sup.m, and acquiring, by the third processor, a plaintext array custom character|.sup.m that has m number of decrypted numerical components custom character|.sup.m custom character|.sub.({tilde over (b)}).sup.m custom character|.sup.m custom character|.sup.m custom character|.sub.({tilde over (b)}).sup.m.

5. The method of claim 4, wherein the decryption procedure includes: performing, by the third processor, modulo operation on a first convolution result of the ciphertext custom character|.sup.m and the p-array custom character|.sup.m modulo the second reference prime p.sub.2 to obtain a first modulo operation result, and performing, by the third processor, modulo operation on the first modulo operation result modulo the first reference prime p.sub.1 to obtain a second modulo operation result custom character|.sup.m, which is defined as custom character|.sup.m:=[(custom character|.sup.m{circle around (*)}{circle around (*)}custom character|.sup.m) (mod p.sub.2)] (mod p.sub.1); and performing, by the third processor, modulo operation on a second convolution result of the second modulo operation result custom character|.sup.m and the first reference inverse p-array custom character.sub.p.sub.1|.sup.m that serves as the private key K.sub.private modulo the first reference prime p.sub.1 to obtain the plaintext array custom character|.sup.m, which is defined as custom character|.sup.m:=custom character|.sup.m{circle around (*)}custom character.sub.p.sub.1|.sup.m (mod p.sub.1).

6. A post-quantum asymmetric key generation system, comprising: a key server including: a p-vector generation coprocessor configured to generate, based on a prime p and one of an arithmetic function and a classical string that serves as a seed, a p-vector {right arrow over (ƒ)}.sub.p that relates to the prime p and that has an infinite number of components, wherein the p-vector {right arrow over (ƒ)}.sub.p is defined as:
{right arrow over (ƒ)}.sub.p:=[ƒ(p.sup.0),ƒ(p.sup.1),ƒ(p.sup.2),ƒ(p.sup.3), . . . ] where ƒ represents said one of the arithmetic function and the classical string that serves as the seed; a p-array generation coprocessor coupled to said p-vector generation coprocessor, and configured to generate, based on the p-vector {right arrow over (ƒ)}.sub.p, a p-array custom character.sub.p|.sub.s,t.sup.m that has m number of components and that relates to the prime p and that is defined as: p .Math. s , t m := .Math. i = 0 t [ f ( p s + im ) , .Math. , f ( p s + im + ( m - 1 ) ) ] , where each of parameters m, s and t is a user-defined positive integer, and the prime p and the parameters s, t cooperatively compose a first parameter set I, and wherein the p-array custom character.sub.p|.sub.s,t.sup.m, is also represented as custom character|.sup.m; an associated matrix generation coprocessor coupled to said p-array generation coprocessor, and configured to generate, based on the p-array custom character|.sup.m, an associated matrix [custom character|.sup.m] that is defined as: [ .Math. m ] = ( .Math. m ( 0 ) .Math. m ( 1 ) .Math. .Math. m ( m - 1 ) .Math. m ( m - 1 ) .Math. m ( 0 ) .Math. .Math. m ( m - 2 ) .Math. .Math. .Math. .Math. m ( 1 ) .Math. m ( 2 ) .Math. .Math. m ( 0 ) ) , where custom character|.sup.m(j) represents a (j+1).sup.th one of the m number of components of the p-array, 0≤j≤(m−1); an inverse p-array generation coprocessor coupled to said associated matrix generation coprocessor, and configured to generate, based on the associated matrix [custom character|.sup.m] and a modulus I which is a user-defined positive integer, an inverse p-array custom character.sub.l|.sup.m with respect to the modulus I, which is defined as:
custom character.sub.l|.sup.m:=(L.sub.l[1,0, . . . ,0][custom character|.sup.m]*)(mod l) where L.sub.l represents an inverse modulus of a determinant of the associated matrix [custom character|.sup.m] with respect to the modulus I, and is defined as: L.sub.l:=(det[custom character|.sup.m]).sup.−1 (mod l), and [custom character|.sup.m]* represents an adjoint matrix of the associated matrix [custom character|.sup.m]; a reference prime determining coprocessor configured to arbitrarily select a first reference prime p.sub.1, and to determine a second reference prime p.sub.2 based on a predetermined criterion that relates to the first reference prime p.sub.1, a greatest one of the m number of components of the p-array custom character|.sup.m which is denoted by b, a first reference positive integer ã, and a second parameter set S that is composed of the parameter m, a second reference positive integer {tilde over (b)} and a third reference positive integer r, wherein the predetermined criterion includes p.sub.2>max(p.sub.1mã{tilde over (b)}, mbr); a private key generation coprocessor coupled to said inverse p-array generation coprocessor and said reference prime determining coprocessor, and configured to acquire a first reference inverse p-array custom character.sub.p.sub.1|.sup.m by making the first reference prime p.sub.1 serve as the modulus I in the inverse p-array custom character.sub.l|.sup.m, the first reference inverse p-array serving as a private key K.sub.private, which is defined as K.sub.private=(custom character|.sup.m,p.sub.1,ã); and a public key generation coprocessor coupled to said inverse p-array generation coprocessor and said reference prime determining coprocessor, and configured to acquire a second reference inverse p-array custom character.sub.p.sub.2|.sup.m by making the second reference prime p.sub.2 serve as the modulus I in the inverse p-array custom character.sub.l|.sup.m, and to generate a public key K.sub.public with respect to a key-generation randomization array custom character|.sub.(ã).sup.m based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, the second reference prime p.sub.2, and the key-generation randomization array custom character|.sub.(ã).sup.m, wherein the key-generation randomization array custom character|.sub.(ã).sup.m has m number of numerical components between 0 and the first reference positive integer ã, and the public key K.sub.public is paired with the private key K.sub.private, and is an array custom character.sub.public|.sup.m that includes m number of numerical components and that is also denoted as K.sub.public=(custom character.sub.public|.sup.m,p.sub.2), representing custom character.sub.public|.sup.m:=Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) (mod p.sub.2); wherein Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) is a key-generation randomization function of the second reference inverse p-array custom character.sub.p.sub.2|.sup.m with respect to the key-generation randomization array custom character|.sub.(ã).sup.m, and is defined as Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã)=p.sub.1 (custom character.sub.p.sub.2|.sup.m{circle around (*)}custom character|.sub.(ã).sup.m), where {circle around (*)} represents a convolution multiplication operator; whereby the public key K.sub.public and the private key K.sub.private are generated based on the arithmetic function and the classical string, the p-vector {right arrow over (ƒ)}.sub.p, and the p-array, thereby increasing speeds of encryption and decryption of the encrypted communication system; and the post-quantum asymmetric key generation system further comprising a transmitter including a processor configured to use the public key K.sub.public, the second reference prime p.sub.2, and an encryption randomization array custom character|.sub.({tilde over (b)}).sup.m that has m number of numerical components between 0 and the second reference positive integer {tilde over (b)} to perform an encryption procedure on a data array custom character|.sub.({tilde over (b)}).sup.m that corresponds to a plaintext to be transmitted and that has m number of numerical components, and to acquire a ciphertext custom character|.sup.m with respect to the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m, wherein the ciphertext custom character|.sup.m has m number of encrypted numerical components, the transmitter configured to transmit the ciphertext custom character|.sup.m to a receiver via a communication channel.

7. The post-quantum asymmetric key generation system of claim 6, the key server further comprising a computer storage coupled to said p-array generation coprocessor, said reference prime determining coprocessor, said private key generation coprocessor and said public key generation coprocessor, and storing the p-array custom character|.sup.m received from said p-array generation coprocessor, the first reference prime p.sub.1 and the second reference prime p.sub.2 received from said reference prime determining coprocessor, the first reference inverse p-array received from said private key generation coprocessor, and the second reference inverse p-array custom character.sub.p.sub.2|.sup.m received from said public key generation coprocessor.

8. The post-quantum asymmetric key generation system of claim 7, wherein said public key generation coprocessor is further configured to generate, based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, and the second reference prime p.sub.2 that are stored in said computer storage and another key-generation randomization array custom character|.sub.(ã).sup.m which is different from the key-generation randomization array custom character|.sub.(ã).sup.m, an updated public key K*.sub.public with respect to said another key-generation randomization array custom character|.sub.(ã).sup.m, wherein the updated public key K*.sub.public is paired with the private key K.sub.private, and said another key-generation randomization array custom character|.sub.(ã).sup.m has m number of numerical components between 0 and the first reference positive integer ã, and the public key K.sub.public is also denoted as K*.sub.public=(custom character.sub.public|.sup.m,p.sub.2), representing custom charactercustom character.sub.public|.sup.m=Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) (mod p.sub.2)=p.sub.1 (custom character.sub.p.sub.2|.sup.m{circle around (*)}custom character|.sub.(ã).sup.m) (mod p.sub.2).

9. An encrypted communication system, comprising: a key server including: a p-vector generation coprocessor configured to generate, based on a prime p and one of an arithmetic function and a classical string that serves as a seed, a p-vector {right arrow over (ƒ)}.sub.p is that relates to the prime p and that has infinite number of components, wherein the p-vector {right arrow over (ƒ)}.sub.p is defined as:
{right arrow over (ƒ)}.sub.p:=[ƒ(p.sup.0),ƒ(p.sup.1),ƒ(p.sup.2),ƒ(p.sup.3), . . . ] where ƒ represents said one of the arithmetic function and the classical string that serves as the seed; a p-array generation coprocessor coupled to said p-vector generation coprocessor, and configured to generate, based on the p-vector {right arrow over (ƒ)}.sub.p, a p-array custom character.sub.p|.sub.s,t.sup.m that has m number of components and that relates the prime p and that is defined as: p .Math. s , t m := .Math. i = 0 t [ f ( p s + im ) , .Math. , f ( p s + im + ( m - 1 ) ) ] , where each of parameters m, s and t is a user-defined positive integer, and the prime p and the parameters s, t cooperatively compose a first parameter set I, and wherein the p-array custom character.sub.p|.sub.s,t.sup.m is also represented as custom character|.sup.m; an associated matrix generation coprocessor coupled to said p-array generation coprocessor, and configured to generate, based on the p-array custom character|.sup.m, an associated matrix [custom character|.sup.m] that is defined as: [ .Math. m ] = ( .Math. m ( 0 ) .Math. m ( 1 ) .Math. .Math. m ( m - 1 ) .Math. m ( m - 1 ) .Math. m ( 0 ) .Math. .Math. m ( m - 2 ) .Math. .Math. .Math. .Math. m ( 1 ) .Math. m ( 2 ) .Math. .Math. m ( 0 ) ) , where custom character|.sup.m(j) represents a (j+1).sup.th one of the m number of components of the p-array, 0≤j≤(m−1); an inverse p-array generation coprocessor coupled to said associated matrix generation coprocessor, and configured to generate, based on the associated matrix [custom character|.sup.m] and a modulus I which is a user-defined positive integer, an inverse p-array custom character.sub.l|.sup.m with respect to the modulus I, which is defined as:
custom character.sub.l|.sup.m:=(L.sub.l[1,0, . . . ,0][custom character|.sup.m]*)(mod l) where L.sub.l represents an inverse modulus of a determinant of the associated matrix [custom character|.sup.m] with respect to the modulus I, and is defined as: L.sub.l:=(det [custom character|.sup.m]).sup.−1 (mod l), and [custom character|.sup.m]* represents an adjoint matrix of the associated matrix [custom character|.sup.m]; a reference prime determining coprocessor configured to arbitrarily select a first reference prime p.sub.1, and to determine a second reference prime p.sub.2 based on a predetermined criterion that relates to the first reference prime p.sub.1, a greatest one of the m number of components of the p-array custom character|.sup.m which is denoted by b, a first reference positive integer ã, and a second parameter set S that is composed of the parameter m, a second reference positive integer {tilde over (b)} and a third reference positive integer r, wherein the predetermined criterion includes p.sub.2>max(p.sub.1mã{tilde over (b)},mbr); a private key generation coprocessor coupled to said inverse p-array generation coprocessor and said reference prime determining coprocessor, and configured to acquire a first reference inverse p-array custom character.sub.p.sub.1|.sup.m by making the first reference prime p.sub.1 serve as the modulus I in the inverse p-array custom character.sub.l|.sup.m, the first reference inverse p-array custom character.sub.p.sub.1|.sup.m serving as a private key K.sub.private, which is defined as K.sub.private=(custom character|.sup.m,p.sub.1,ã); and a public key generation coprocessor coupled to said inverse p-array generation coprocessor and said reference prime determining coprocessor, and configured to acquire a second reference inverse p-array custom character.sub.p.sub.2|.sup.m by making the second reference prime p.sub.2 serve as the modulus I in the inverse p-array custom character.sub.l|.sup.m, and to generate a public key K.sub.public with respect to a key-generation randomization array custom character|.sub.(ã).sup.m based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, the second reference prime p.sub.2, and the key-generation randomization array custom character|.sub.(ã).sup.m, wherein the key-generation randomization array custom character|.sub.(ã).sup.m has m number of numerical components between 0 and the first reference positive integer ã and the public key K.sub.public is paired with the private key K.sub.private, and is an array custom character.sub.public|.sup.m that includes m number of numerical components and that is also denoted as K.sub.public=(custom character.sub.public|.sup.m,p.sub.2), representing custom character.sub.public|.sup.m:=Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) (mod p.sub.2); wherein Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) is a key-generation randomization function of the second reference inverse p-array custom character.sub.p.sub.2|.sup.m with respect to the key-generation randomization array custom character|.sub.(ã).sup.m, and is defined as Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã)=p.sub.1 (custom character.sub.p.sub.2|.sup.m{circle around (*)}custom character|.sub.(ã).sup.m), where {circle around (*)} represents a convolution multiplication operator; whereby the public key K.sub.public and the private key K.sub.private are generated based on the arithmetic function and the classical string, the p-vector {right arrow over (ƒ)}.sub.p, and the p-array, thereby increasing speeds of encryption and decryption of the encrypted communication system; a transmitter including a first computer storage that stores the public key K.sub.public, the second reference prime p.sub.2 and the second reference positive integer {tilde over (b)}, and a first processor coupled to said first computer storage; and a receiver including a second computer storage that stores the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2, and a second processor coupled to said second computer storage; wherein, for a data array custom character|.sup.m that corresponds to a plaintext to be transmitted to the receiver and that has m number of numerical components, said first processor uses the public key K.sub.public and the second reference prime p.sub.2 that are stored in said first computer storage, and an encryption randomization array custom character|.sub.({tilde over (b)}).sup.m that has m number of numerical components between 0 and the second reference positive integer {tilde over (b)}, to perform an encryption procedure on the data array custom character|.sup.m, and acquires a ciphertext custom character|.sup.m with respect to the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m, and said transmitter transmits the ciphertext custom character|.sup.m to said receiver via a first communication channel, wherein the ciphertext custom character|.sup.m has m number of encrypted numerical components; wherein, upon receipt of the ciphertext custom character|.sup.m by said second processor, said second processor uses the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 that are stored in said second computer storage to perform a decryption procedure on the ciphertext custom character|.sup.m, and acquires a plaintext array custom character|.sup.m that has m number of decrypted numerical components and that is identical to the data array custom character|.sup.m.

10. The encrypted communication system of claim 9, wherein the plaintext has m number of characters, and said first processor has a text conversion coprocessor configured to use a predetermined character-to-numeric technique to convert the plaintext into the data array custom character|.sup.m; and wherein each of the m number of numerical components of the data array custom character|.sup.m is between 0 and the first reference positive integer ã, and represents a corresponding one of the m number of characters of the plaintext.

11. The encrypted communication system of claim 10, wherein: said first processor has an encryption randomization function generation coprocessor, and a ciphertext generation coprocessor coupled to said text conversion coprocessor and said encryption randomization function generation coprocessor; and in the encryption procedure, said encryption randomization function generation coprocessor generates, based on the public key K.sub.public and the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m, an encryption randomization function custom character|.sup.m that is defined as custom character|.sup.m:=Rand (custom character.sub.public|.sup.m,1,{tilde over (b)}); and said ciphertext generation coprocessor acquires the ciphertext custom character|.sup.m by performing modulo operation on a sum of the data array custom character|.sup.m and the encryption randomization function custom character|.sup.m modulo the second reference prime p.sub.2, the ciphertext custom character|.sup.m being represented by custom character|.sup.m:=(custom character|.sup.m+custom character|.sup.m) (mod p.sub.2).

12. The encrypted communication system of claim 9, wherein: said second processor has a first convolution coprocessor, and a second convolution coprocessor coupled to said first convolution coprocessor; and in the decryption procedure, said first convolution coprocessor computes a first convolution result of the ciphertext custom character|.sup.m and the p-array custom character|.sup.m, performs modulo operation on the first convolution result modulo the second reference prime p.sub.2 to obtain a first modulo operation result, and performs modulo operation on the first modulo operation result modulo the first reference prime p.sub.1 to obtain a second modulo operation result custom character|.sup.m, which is defined as custom character|.sup.m:=[(custom character|.sup.m{circle around (*)}custom character|.sup.m) (mod p.sub.2)] (mod p.sub.1); and said second convolution coprocessor computes a second convolution result of the second modulo operation result custom character|.sup.m and the first reference inverse p-array custom character.sub.p.sub.1|.sup.m that serves as the private key K.sub.private, performs modulo operation on the second convolution result modulo the first reference prime p.sub.1 to obtain the plaintext array custom character|.sup.m, which is defined as custom character|.sup.m:=custom character|.sup.m{circle around (*)}custom character.sub.p.sub.1|.sup.m (mod p.sub.1).

13. The encrypted communication system of claim 9, wherein: before the public key K.sub.public, the second reference prime p.sub.2 and the second reference positive integer {tilde over (b)} are stored in said first computer storage, said key server transmits the public key K.sub.public, the second reference prime p.sub.2 and the second reference positive integer {tilde over (b)} to said transmitter via a second communication channel, and said first processor stores the public key K.sub.public, the second reference prime p.sub.2 and the second reference positive integer {tilde over (b)} that are received from said key server into said first computer storage; and before the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 are stored in said second computer storage, said key server transmits the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 to said receiver via a third communication channel, and said second processor stores the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 that are received from said key server into said second computer storage.

14. The encrypted communication system of claim 13, wherein said key server further includes a third computer storage coupled to said p-array generation coprocessor, said reference prime determining coprocessor, said private key generation coprocessor and said public key generation coprocessor, and storing the p-array custom character|.sup.m received from said p-array generation coprocessor, the first reference prime p.sub.1 and the second reference prime p.sub.2 received from said reference prime determining coprocessor, the first reference inverse p-array custom character.sub.p.sub.1|.sup.m received from said private key generation coprocessor, and the second reference inverse p-array custom character.sub.p.sub.2|.sup.m received from said public key generation coprocessor.

15. The encrypted communication system of claim 14, wherein: said public key generation coprocessor is further configured to generate, based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, the second reference prime p.sub.2, and another key-generation randomization array custom character|.sub.(ã).sup.m which is different from the key-generation randomization array custom character|.sub.(ã).sup.m, an updated public key K*.sub.public with respect to said another key-generation randomization array custom character|.sub.(ã).sup.m, wherein the updated public key K*.sub.public is paired with the private key K.sub.private, and said another key-generation randomization array custom character|.sub.(ã).sup.m has m number of numerical components between 0 and the first reference positive integer ã, and the public key K.sub.public is also denoted as K*.sub.public=(custom character.sub.public|.sup.m,p.sub.2), representing custom character.sub.public|.sup.m=Rand (custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) (mod p.sub.2)=p.sub.1 (custom character.sub.p.sub.2|.sup.m{circle around (*)}custom character|.sub.(ã).sup.m) (mod p.sub.2); said key server transmits the updated public key K*.sub.public to said transmitter via the second communication channel; upon receipt of the updated public key K*.sub.public from said key server, said first processor updates the public key K.sub.public that is stored in said first computer storage to become the updated public key K*.sub.public; after updating the public key K.sub.public to become the updated public key K*.sub.public, said first processor uses the updated public key K*.sub.public, the second reference prime p.sub.2, and the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m to perform the encryption procedure on the data array custom character|.sup.m, and acquires another ciphertext custom character with respect to the updated public key K*.sub.public and the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m, and said transmitter transmits said another ciphertext custom character to said receiver via the first communication channel, wherein said another ciphertext custom character has m number of encrypted numerical components; and upon receipt of said another ciphertext custom character by said second processor, said second processor uses the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 that are stored in said second computer storage to perform the decryption procedure on said another ciphertext custom character, and acquires the plaintext array custom character|.sup.m.

Description

BRIEF DESCRIPTION OF THE DRAWINGS

(1) Other features and advantages of the disclosure will become apparent in the following detailed description of the embodiment(s) with reference to the accompanying drawings, of which:

(2) FIG. 1 is a block diagram illustrating an embodiment of the encrypted communication system according to the disclosure;

(3) FIG. 2 is a block diagram illustrating a key server of the encrypted communication system;

(4) FIGS. 3 and 4 cooperatively form a flow chart illustrating steps of a key generation procedure according to the disclosure;

(5) FIG. 5 is a block diagram illustrating a transmitting end of the encrypted communication system;

(6) FIG. 6 is a block diagram illustrating a receiving end of the encrypted communication system;

(7) FIG. 7 is a flow chart illustrating steps of an encryption procedure according to the disclosure; and

(8) FIG. 8 is a flow chart illustrating steps of a decryption procedure according to the disclosure.

DETAILED DESCRIPTION

(9) Before the disclosure is described in greater detail, it should be noted that where considered appropriate, reference numerals or terminal portions of reference numerals have been repeated among the figures to indicate corresponding or analogous elements, which may optionally have similar characteristics.

(10) Referring to FIG. 1, the embodiment of the encrypted communication system 100 according to this disclosure is shown to include a key server 1, and a plurality of user ends. Each user end may communicate with another user end based on a communication protocol that uses an encryption procedure and a decryption procedure. Each user end may serve as a transmitting end when transmitting messages, and serve as a receiving end when receiving messages. FIG. 1 simply exemplifies two user ends, one of which serves as a transmitting end 2 and the other one of which serves as a receiving end 3, but this disclosure is not limited in this respect. The transmitting end 2 includes a storage unit 21, and a processor 22 coupled to the storage unit 21. The receiving end 3 includes a storage unit 31, and a processor 32 coupled to the storage unit 31. In this embodiment, the key server 1 is independent from the transmitting end 2 and the receiving end 3. However, the key server 1 may be integrated within the transmitting end 2 in other embodiments.

(11) The key server 1 is configured with a post quantum asymmetric key generation system 10. Referring to FIG. 2, the post-quantum asymmetric key generation system 10 includes a p-vector (prime vector) generation module 11, a p-array (prime array) generation module 13 coupled to the p-vector generation module 11, an associated matrix generation module 14 coupled to the p-array generation module 13, an inverse p-array generation module 15 coupled to the associated matrix generation module 14, a reference prime determining module 16, a private key generation module 17 coupled to the inverse p-array generation module 15 and the reference prime determining module 16, a public key generation module 18 coupled to the inverse p-array generation module 15 and the reference prime determining module and a storage module 19 coupled to the p-array generation module 13, the reference prime determining module 16, the private key generation module 17 and the public key generation module 18. It is noted that the p-vector generation module 11, the p-array generation module 13, the associated matrix generation module 14, the inverse p-array generation module 15, the reference prime determining module 16, the private key generation-module 17 and the public key generation module 18 may be integrated within a processor (not shown), but this disclosure is not limited in this respect.

(12) Before use of the encrypted communication system 100, the key server 1 generates asymmetric keys (e.g., a private key and at least one public key that is paired with the private key) for encryption and decryption. FIG. 3 and FIG. 4 cooperatively exemplify how the post-quantum asymmetric key generation system 10 exemplified in FIG. 2 performs an asymmetric key generation procedure.

(13) In step S31, the p-vector generation module 11 generates, based on a prime p and one of an arithmetic function and a classical string (e.g., a sequence of integers, or characters which can be mapped to integers, such as ASCII codes) that serves as a seed (i.e., either the arithmetic function or the classical string serves as the seed), a p-vector {right arrow over (ƒ)}.sub.p that relates to the prime p and that has an infinite number of components. In this embodiment, the p-vector {right arrow over (ƒ)}.sub.p is defined as:
{right arrow over (ƒ)}.sub.p:=[ƒ(p.sup.0),ƒ(p.sup.1),ƒ(p.sup.2),ƒ(p.sup.3), . . . ],
where ƒ is either the arithmetic function or the classical string that serves as the seed (for the latter case, ƒ(p.sup.n) represents the n-th character in the classical string).

(14) In one example, the seed is exemplified as an arithmetic function ƒ(p.sup.n) of:

(15) in case n=0, ƒ(p.sup.n)=1; and

(16) in case n>0,
ƒ(p.sup.n)=(−1).sup.n×(the n.sup.th number of the fractional part of √{square root over (p)})  (1)

(17) In step S32, the p-array generation module 13 generates, based on the p-vector {right arrow over (ƒ)}.sub.p, a p-array custom character.sub.p|.sub.s,t.sup.m that has m number of components and that relates to the prime p and that is defined as

(18) p .Math. s , t m := .Math. i = 0 t [ f ( p s + im ) , .Math. , f ( p s + im + ( m - 1 ) ) ] ,
where each of parameters m, s and t is a user-defined positive integer, and the prime p and the parameters s, t cooperatively compose a first parameter set I (also referred to as I=(p, s, t) hereinafter). The representation of the p-array custom character.sub.p|.sub.s,t.sup.m may be simplified as custom character|.sup.m hereinafter. For example, when I=(3, 0, 1) and m=5, the p-vector {right arrow over (ƒ)}.sub.3 and the p-array custom character.sub.3|.sub.0,1.sup.5 (or simply custom character|.sup.5) can be obtained as the following equations (2) and (3), respectively.

(19) f .fwdarw. 3 = [ 1 , - 7 , 3 , - 2 , 0 , - 5 , 0 , - 8 , 0 , - 7 , .Math. ] ( 2 ) ( 3 )

(20) As another example, let custom character|.sup.5 below be given by a secret function ƒ and a secret instance I:
custom character|.sup.5=[2,81,27,9,3]  (4)

(21) The above two examples exemplarily show how the p-array is generated based on the seed and the first parameter set I. By saving the first parameter set I, the corresponding p-array can be obtained based on the seed at any time.

(22) In step S33, the p-array generation module 13 determines whether each of the m number of components of the p-array custom character|.sup.m is not zero. When the determination is affirmative (i.e., all of the m number of components of the p-array custom character|.sup.m are non-zero), the p-array generation module 13 outputs the p-array custom character|.sup.m to the associated matrix generation module 14, and stores the p-array custom character|.sup.m into the storage module 19 (step 934). As an example, all of the five components of the p-array custom character|.sup.m as shown in each of equations (3) and (4) are not zero. When the p-array generation nodule 13 determines that any one of the m number of components of the p-array custom character|.sup.m is zero, the flow goes back to step S32 for the user to apply a different first parameter set I (i.e., at least one of the prime p and the parameters s, t in the new first parameter set I is different from that in the original first parameter set I) to step S32. Step S32 may be repeated with different first parameter sets I until the determination in step S33 is affirmative.

(23) In step S35, the associated matrix generation module 14 generates an associated matrix [custom character|.sup.m] based on the p-array custom character|.sup.m received from the p-array generation module 13, and outputs the associated matrix [custom character|.sup.m] to the inverse p-array generation module 15. The associated matrix [custom character|.sup.m] is defined as:

(24) [ .Math. m ] = ( .Math. m ( 0 ) .Math. m ( 1 ) .Math. .Math. m ( m - 1 ) .Math. m ( m - 1 ) .Math. m ( 0 ) .Math. .Math. m ( m - 2 ) .Math. .Math. .Math. .Math. m ( 1 ) .Math. m ( 2 ) .Math. .Math. m ( 0 ) ) ,
where custom character|.sup.m(j) represents a (j+1).sup.th one of the m number of components of the p-array, 0≤j≤(m−1). Following the p-array custom character|.sup.5 in equation (4), the associated matrix [custom character|.sup.5] generated by the associated matrix generation module 14 would be as shown in equation (5).

(25) 0 [ .Math. 5 ] = ( 2 81 27 9 3 3 2 81 27 9 9 3 2 81 27 27 9 3 2 81 81 27 9 3 2 ) ( 5 )

(26) In step S36, based on the associated matrix [custom character|.sup.m] and a modulus custom character which is a user-defined positive integer, the inverse p-array generation module 15 generates an inverse p-array custom character|.sup.m with respect to the modulus custom character. The inverse p-array generation module 15 outputs the inverse p-array custom character|.sup.m to the private key generation module 17 and the public key generation module 18. The inverse p-array custom character|.sup.m is defined as:
custom character|.sup.m:=(custom character[1,0, . . . ,0][custom character|.sup.m]*)(mod custom character),
where custom character represents an inverse modulus of a determinant of the associated matrix [custom character|.sup.m] with respect to the modulus custom character, and is defined as: custom character:=(det[custom character|.sup.m]).sup.−1(mod custom character), and [custom character|.sup.m]* represents an adjoint matrix of the associated matrix [custom character|.sup.m].

(27) In step S37, the reference prime determining module 16 arbitrarily selects a first reference prime p.sub.1, and determines a second reference prime p.sub.2 based on a predetermined criterion that relates to the first reference prime p.sub.1, a greatest one of the m number of components of the p-array custom character|.sup.m which is denoted by b, a first reference positive integer ã, and a second parameter set S that is composed of the parameter m a second reference positive integer {tilde over (b)} and a third reference positive integer r. The predetermined criterion includes p.sub.2>max(p.sub.1mã{tilde over (b)},mbr). The reference prime determining module 16 outputs the first reference prime p.sub.1 to the private key generation module 17, outputs the first reference prime p.sub.1 and the second reference prime p.sub.2 to the public key generation module 18, and stores the first reference prime p.sub.1 and the second reference prime p.sub.2 in the storage module 19. Following the example of equation (4), it is obtained that b=max(custom character|.sup.5)=81. In addition, under an exemplary condition of S=(m, {tilde over (b)}, r)=(5, 120, 120) and ã=120, when the reference prime determining module 16 selects p.sub.1=251, the predetermined criterion would include:
p.sub.2>p.sub.1mã{tilde over (b)}=251×5×120×120=8072000,
p.sub.2>mbr=5×81×120=48600,
so it may be determined, for example, that p.sub.2=18072001, but this disclosure is not limited in this respect as long as the predetermined criterion is satisfied.

(28) In step S38 that follows steps S36 and S37, the private key generation module 17 makes the first reference prime p.sub.1 serve as the modulus custom character in the inverse p-array custom character|.sup.m, so as to acquire a first reference inverse p-array custom character.sub.p.sub.1|.sup.m. The first reference inverse p-array custom character.sub.p.sub.1|.sup.m serves as a private key K.sub.private (i.e., K.sub.private=custom character.sub.p.sub.1|m.sup.m), which is defined as K.sub.private=(custom character|.sup.m,p.sub.1,ã). The private key generation module 17 stores the first reference inverse p-array custom character.sub.p.sub.1|.sup.m in the storage module 19. Following the previous example of equation (5) with p.sub.1=251, since det([custom character|.sup.5])≡68(mod 251), it can be obtained that L.sub.251=(68).sup.−1(mod 251)=48, and the private key K.sub.private is acquired to be:

(29) K private = 251 .Math. 5 = ( .Math. 5 , 251 , 120 ) = ( L 251 [ 1 , 0 , .Math. , 0 ] [ .Math. 5 ] * ) ( mod 251 ) = [ 164 , 128 , 92 , 223 , 74 ] ( 6 )

(30) In step S39 that follows steps S36 and S37, the public generation module 18 makes the second reference prime p.sub.2 serve as the modulus custom character in the inverse p-array custom character|.sup.m to as to acquire a second reference inverse p-array custom character.sub.p.sub.2|m.sup.m, and stores the second reference inverse p-array custom character.sub.p.sub.2|.sup.m into the storage module 19. Following the previous example where m=5, p=3, p.sub.2=18072001 and ã=120, since det([custom character|.sup.5])≡16142697(mod 18072001) and L.sub.18072001=16142697.sup.−1≡17712763(mod 18072001), it is obtained that:

(31) 18072001 | 5 = ( | 5 , 18072001 , 120 ) = ( L 18072001 [ 1 , 0 , .Math. , 0 ] [ | 5 ] * ) = [ 1287507 , 11026277 , 11798464 , 16030112 , 7400741 ] ( 7 )

(32) In step S40, the public generation module 18 generates a public key K.sub.public with respect to a key-generation randomization array custom character|.sub.(ã).sup.m based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, the second reference prime p.sub.2, and the key-generation randomization array custom character|.sub.(ã).sup.m. The key-generation randomization array custom character|.sub.(ã).sup.m has m number of numerical components between 0 and the first reference positive integer ã (including 0 and ã) (e.g., m number of random integers between 0 and ã). The public key K.sub.public is paired with the private key K.sub.private. In this embodiment, the public key K.sub.public is an array custom character.sub.public|.sup.m that includes m number of numerical components and that is also denoted as K.sub.public=(custom character.sub.public|.sup.m,p.sub.2), representing custom character.sub.public|.sup.m:=Rand(custom character.sub.p.sub.2|,p.sub.1,ã)(mod p.sub.2). Rand(custom character.sub.p.sub.2|.sup.m,p.sub.1,ã) is a key generation randomization function of the second reference inverse p-array custom character.sub.p.sub.2|.sup.m with respect to the key-generation randomization array custom character|.sub.(ã).sup.m, and is defined as Rand(custom character.sub.p.sub.2|.sup.m,p.sub.1,ã)=p.sub.1(custom character.sub.p.sub.2|.sup.mcustom charactercustom character|.sub.(ã).sup.m), where custom character represents a convolution multiplication operator. Following the previous example where m=5, p=3, p.sub.1=251, p.sub.2=18072001, ã=120 and custom character.sub.18072001|.sup.5 in equation (7), in a case where an exemplary key-generation randomization array that is assumed to be custom character|.sub.(120).sup.5=[98,83,38,114,4] is used, the public key K.sub.public as obtained by using the private key K.sub.private in equation (6) as:

(33) ( 8 ) public .Math. 5 = Rand ( 18072001 .Math. 5 , 251 , 120 ) ( mod 18072001 ) = 251 ( 18072001 .Math. 5 , 251 , 120 * .Math. ( 120 ) 5 ) ( mod 18072001 ) = [ 13126654 , 5728821 , 15683333 , 5171087 , 12284834 ] .

(34) However, the public key K.sub.public that is obtained using the private key K.sub.private in equation (6) is not limited to such. If another exemplarily key-generation randomization array that is assumed to be custom character|.sub.(120).sup.5=[58,53,7,85,90] is used by the public key K*.sub.public is obtained using the private key K.sub.private in equation (6) as:
custom character.sub.public|.sup.5=[17687579,12818350,12426167,13811533,109530556]  (9)
In other words, the public key generation module 18 may generate different public keys that are paired with the same private key K.sub.private by using different key-generation randomization arrays, favoring the key server 1 in refresh of the public key.

(35) After completion of the asymmetric key generation procedure, the key server 1 transmits the public key K.sub.public (in the case the public key K.sub.public is generated), the second reference prime p.sub.2 and the second reference positive integer {tilde over (b)} to the transmitting end 2 via a communication channel (C2, see FIG. 1) between the key server 1 and the transmitting end 2, and transmits the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 to the receiving end 3 via a communication channel (C3, see FIG. 1) between the key server 1 and the receiving end 3.

(36) Referring to FIG. 5, the processor 22 of the transmitting end 2 stores the public key K.sub.public, the second reference prime p.sub.2 and the second reference positive integer {tilde over (b)} received from the key server 1 into the storage unit 21. In this embodiment, the processor 22 is configured to have a text conversion module 221, an encryption randomization function generation module 222, and a ciphertext generation module 223 coupled to the text conversion module 221 and the encryption randomization function generation module 222.

(37) Further referring to FIG. 7, an encryption procedure performed by the transmitting end 2 is illustrated. In step S71, the text conversion module 221 uses a predetermined character-to-numeric technique, such as ASCII code, to convert a plaintext that is to be encrypted and that has m number of characters into a data array custom character|.sup.m that has m number of numerical components. In detail, each of the m number of numerical components of the data array custom character|.sup.m is between 0 and the first reference positive integer ã, and represents a corresponding one of the m number of characters of the plaintext. For example, in a case the plaintext is “Hello” (i.e., m=5), the data array custom character|.sup.5 that obtained based on the ASCII code would be:
custom character|.sup.5=[72,101,108,108,111]  (10),
but this disclosure is not limited to any specific character-to-numeric technique.

(38) In step S72, the encryption randomization function generation module 222 generates an encryption randomization function custom character|.sup.m based on the public key K.sub.public and an encryption randomization array custom character|.sub.({tilde over (b)}).sup.m. The encryption randomization array custom character|.sub.({tilde over (b)}).sup.m has m number of numerical components between 0 and the second reference positive integer {tilde over (b)}. The encryption randomization function custom character|.sup.m is defined as custom character|.sup.m:=Rand(custom character.sub.public|.sup.m,1,{tilde over (b)}). Following the previous example where the second parameter set S=(m, {tilde over (b)}, r)=(5, 120, 120) and the public key K.sub.public=custom character.sub.public|.sup.5=[13126654,5728821,15683333,5171087,12284834], in a case where the encryption randomization array is exemplified as

(39) .Math. ( b ~ ) 5 = .Math. ( 120 ) 5 = [ 52 , 45 , 91 , 95 , 22 ] ,
the resultant encryption randomization function custom character|.sup.5 would be:

(40) ( 11 ) .Math. 5 = Rand ( public .Math. 5 , 1 , 120 ) = [ 3321923152 , 2842804607 , 3548678919 , 3013267698 , 3131717969 ] .
In another case where the encryption randomization array is exemplified as custom character|.sub.({tilde over (b)}).sup.5=custom character|.sub.(120).sup.5=[17,23,45,90,2], the resultant encryption randomization function custom character|.sup.5 would be:

(41) ( 12 ) .Math. 5 = Rand ( public .Math. 5 , 1 , 120 ) = [ 2161360827 , 1448885025 , 2105056208 , 1912390611 , 1575374362 ] .
In other words, the encryption randomization function generation module 222 may generate different encryption randomization functions by using different encryption randomization arrays.

(42) In step S73 that follows steps S71 and S72, the ciphertext generation module 223 acquires a ciphertext custom character|.sup.m with respect to the encryption randomization function custom character|.sup.m (received from the encryption randomization function generation module 222) by performing modulo operation on a sum of the data array custom character|.sup.m (received from the text conversion module 221) and the encryption randomization function custom character|.sup.m modulo the second reference prime p.sub.2. The ciphertext custom character|.sup.m has m number of encrypted numerical components, and is represented by custom character|.sup.m:=(custom character|.sup.m+custom character|.sup.m)(mod p.sub.2). In the example where the data array custom character|.sup.5 and the encryption randomization function custom character|.sup.5 are as shown in equations (10) and (11), the resultant ciphertext custom character|.sup.5 would be:

(43) ( 13 ) .Math. 5 = ( .Math. 5 + .Math. 5 ) ( mod 18072001 ) = [ 14747041 , 5500551 , 6566831 , 13315640 , 5261907 ]

(44) In the example where the data array custom character|.sup.5 and the encryption randomization function custom character|.sup.5 are as shown in equations (10) and (12), the resultant ciphertext custom character|.sup.5 would be:

(45) ( 14 ) .Math. 5 = ( .Math. 5 + .Math. 5 ) ( mod 18072001 ) = [ 10792780 , 3125046 , 8704200 , 14830614 , 3110386 ]

(46) After completion of the encryption procedure, the transmitting end 2 transmits the ciphertext custom character|.sup.m to the receiving end 3 via a communication channel (C1, see FIG. 1) between the transmitting end 2 and the receiving end 3. The communication channel (C1) can be an unencrypted channel by virtue of the encrypted communication system 100 according to this disclosure.

(47) Referring to FIG. 1 and FIG. 6, the processor 32 of the receiving end 3 stores the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 received from the key server 1 into the storage unit 31. In this embodiment, the processor 32 is configured to have a first convolution module 321, and a second convolution module 322 coupled to the first convolution module 321.

(48) Further referring to FIG. 8, a decryption procedure to be performed on the ciphertext custom character|.sup.m received by the receiving end 3 is illustrated. In step S81, the first convolution module 321 computes a first convolution result of the ciphertext custom character|.sup.m and the p-array custom character|.sup.m (i.e., custom character|.sup.mcustom charactercustom character|.sup.m)), performs modulo operation on the first convolution result modulo the second reference prime p.sub.2 to obtain a first modulo operation results (i.e., custom character|.sup.mcustom charactercustom character|.sup.m)(mod p.sub.2)), and performs modulo operation on the first modulo operation result modulo the first reference prime p.sub.1 to obtain a second modulo operation result custom character|.sup.m. The second modulo operation result custom character|.sup.m is defined as custom character|.sup.m:=[(custom character|custom charactercustom character|.sup.m)(mod p.sub.2)](mod p.sub.1). Following the previous example where p.sub.1=251, p.sub.2=18072001, the p-array is custom character|.sup.5 of equation (4) and the ciphertext custom character|.sup.5 of equation (13), the resultant first modulo operation result and second modulo operation result would be as follows:

(49) ( 15 ) ( .Math. 5 .Math. 5 ) ( mod 18072001 ) = [ 5305912 , 5220083 , 4408431 , 6184511 , 4741098 ] .Math. 5 = [ 5305912 , 5220083 , 4408431 , 61845511 , 4741098 ] ( mod 251 ) = [ 23 , 36 , 118 , 122 , 210 ] .
Following another example where p.sub.1=251, p.sub.2=18072001, the p-array is custom character|.sup.5 of equation (4) and the ciphertext is custom character|.sup.5 of equation (14), the resultant first modulo operation result and second modulo operation result would be as follows:

(50) 0 ( 16 ) ( .Math. 5 3 .Math. 5 ) ( mod 18072001 ) = [ 2642300 , 3569758 , 1907467 , 3871797 , 3041577 ] .Math. 5 = [ 2642300 , 3569758 , 1907467 , 3871797 , 3041577 ] ( mod 251 ) = [ 23 , 36 , 118 , 122 , 210 ]
It is noted from equations (15) and (16) that the first convolution module 321 acquires the same second modulo operation result (custom character|.sup.5=custom character|.sup.5=[23,36,118,122,210]) by using different ciphertexts custom character|.sup.5 and custom character|.sup.5.

(51) In step S82, the second convolution module 322 computes a second convolution result of the second modulo operation result custom character|.sup.m and the first reference inverse p-array custom character.sub.p.sub.1|.sup.m that serves as the private key K.sub.private, performs modulo operation on the second convolution result modulo the first reference prime p.sub.1 to obtain a plaintext array custom character|.sup.m, which has m number of decrypted numerical components and which is defined as custom character|.sup.m:=custom character|.sup.mcustom charactercustom character.sub.p.sub.1|.sup.m(mod p.sub.1). Following the previous example where p.sub.1=251, the private key K.sub.private is custom character.sub.251|.sup.5 in equation (6) and the second modulo operation results is custom character|.sup.5 in equation (15), the obtained plaintext array custom character|.sup.5 would be:

(52) .Math. 5 = .Math. 5 251 .Math. 5 ( mod 251 ) [ 23 , 36 , 118 , 122 , 210 ] [ 164 , 128 , 92 , 223 , 74 ] ( mod 251 ) [ 72 , 101 , 108 , 108 , 111 ] = Hello .

(53) It can be seen that the obtained plaintext array custom character|.sup.5 is identical to the data array custom character|.sup.5 in equation (10). Accordingly, the receiving end 3 can successfully obtain the plaintext “Hello” by converting all the decrypted numerical components of the plaintext array custom character|.sup.5 into characters.

(54) Referring to FIGS. 1 and 2 again, when the encrypted communication system 100 needs to perform key refresh, the public key generation module 18 of the key server 1 may be used to perform step S40 (see FIG. 4) for generating, with respect to a key-generation randomization array custom character|.sub.(ã).sup.m (e.g., custom character|.sub.(120).sup.5) that is different from the key-generation randomization array custom character|.sub.(ã).sup.m used to generate the original public key K.sub.public, an updated public key K*.sub.public (e.g., custom character.sub.public|.sup.5 in equation (9)) that is paired with the private key K.sub.private, based on the second reference inverse p-array custom character.sub.p.sub.2|.sup.m, the first reference prime p.sub.1, the second reference prime p.sub.2, and the key-generation randomization array custom character|.sub.(ã).sup.m. Similarly, the updated public key K*.sub.public can be represented as custom character.sub.public|.sup.m=Rand(custom character.sub.p.sub.2|.sup.m,p.sub.1,ã)(mod p.sub.2)=p.sub.1(custom character.sub.p.sub.2|.sup.mcustom charactercustom character|.sub.(ã).sup.m)(mod p.sub.2), denoted as K*.sub.public=(custom character.sub.public|.sup.5,18072001). Then, the key server 1 transmits the updated public key K*.sub.public to the transmitting end 2 via the communication channel (C2), and the processor 22 of the transmitting end 2 updates the public key K.sub.public to the updated public key K*.sub.public in the storage unit 21.

(55) After the update of the public key in the storage unit 21, the processor 22 of the transmitting end 2 can use the updated public key K*.sub.public, the second reference prime p.sub.2, and the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m to perform the encryption procedure on the data array custom character|.sup.m, and acquire another ciphertext custom character with respect to the updated public key K*.sub.public and the encryption randomization array custom character|.sub.({tilde over (b)}).sup.m. The ciphertext custom character has m number of encrypted numerical components, and is transmitted to the receiving end 3 via the communication channel (C1) by the processor 22 of the transmitting end 2. Following the previous example where m=4, {tilde over (b)}=120, the data array is custom character|.sup.5 in equation (10) and the public key is K*.sub.public in equation (9), when custom character|.sub.({tilde over (b)}).sup.5=custom character|.sub.(120).sup.5=[33,81,78,19,14], the resultant ciphertext custom character|.sup.5 would be:
custom character|.sup.5=[18005199,1895209,12634479,5802146,12936752]  (17).

(56) In another case where custom character|.sub.({tilde over (b)}).sup.5=custom character|.sub.(120).sup.5=[13,25,19,92,54], the resultant ciphertext custom character|.sup.5 would be:
custom character|.sup.5=[17286247,11666092,5342822,6738991,2826645]  (18)

(57) When the processor 32 of the receiving end 3 receives the ciphertext custom character from the transmitting end 2, the processor 32 uses the private key K.sub.private, the p-array custom character|.sup.m, the first reference prime p.sub.1 and the second reference prime p.sub.2 to perform the decryption procedure on the ciphertext custom character, so as to acquire the plaintext array custom character|.sup.m. Following the previous example where p.sub.1=251, p.sub.2=18072001, the p-array is custom character|.sup.5 in equation (4) and the ciphertext is custom character|.sup.5 in equation (17), where the resultant first modulo operation result and second modulo operation results custom character|.sup.5 would respectively be:

(58) ( .Math. 5 .Math. 5 ) ( mod 18072001 ) = [ 4541115 , 4066487 , 3590422 , 3912710 , 4450691 ] = [ 4541115 , 4066487 , 3590422 , 3912710 , 4450691 ] ( mod 251 ) = [ 23 , 36 , 118 , 122 , 210 ]
In another example where p.sub.1=251, p.sub.2=18072001, the p-array is custom character|.sup.5 in equation (4) and the ciphertext is custom character|.sup.5 in equation (18), the resultant first modulo operation result and second modulo operation result custom character|.sup.5 would respectively be:

(59) ( .Math. 5 ) ( mod 18072001 ) = [ 3669141 , 3982904 , 4102462 , 3585155 , 3217277 ] .Math. 5 = [ 3669141 , 3982904 , 4102462 , 3585155 , 3217277 ] ( mod 251 ) = [ 23 , 36 , 118 , 122 , 210 ] .

(60) It should be noted that even if the receiving end 3 receives different ciphertexts (e.g., custom character|.sup.5 and custom character|.sup.5) that are encrypted using the updated public key K*.sub.public, the same second modulo operation result (custom character|.sup.5=custom character|.sup.5=[23,36,118,122,210]) can be obtained using the private key K.sub.private, so the same plaintext can be obtained.

(61) Accordingly, it is known from the above detailed descriptions that: 1. The post-quantum asymmetric key generation system 10 can perform the asymmetric key generation procedure to generate a plurality of private keys by using only a single arithmetic function or classical string in cooperation with different combinations of the first parameter set I, the second parameter set S, the first reference prime p.sub.1 and the second reference prime p.sub.2; 2. For a specific private key, the post-quantum asymmetric key generation system 10 can generate a plurality of public keys each paired with the private key by use of a soft key reset algorithm, which is fast and which does not require recalculating the private key, so the key server 1 may perform key refresh more easily. 3. There is no unique way to generate the p-array. Some randomness can be added to the p-vector by zero padding, or adding randomness to the creation of the p-array. 4. Key space may be increased by selecting a larger parameter m, so to increase difficulty for the brute force attack. In this embodiment, selections of m=5 and p.sub.1=251 are only for convenience of explanation. In a case where m=16 or even m=64, the possible key space may become so big that a brute force attack will take an absurd amount of time to succeed. The size of the message space and key space will contain a huge number of possibilities, making the brute force attack not work.

(62) Table 1 lists experiment results of time required for encryption and decryption on different lengths of messages using the encrypted communication system 100 under a hardware specification of an octa-core processor and 32 GB RAM (random access memory).

(63) TABLE-US-00001 TABLE 1 Length of message Time for encryption Time for decryption (bytes) (ms) (ms) 4 0.000193 0.001184 8 0.000225 0.001224 16 0.000279 0.000759 32 0.000399 0.001048 64 0.000687 0.001526 128 0.000886 0.002171 196 0.000997 0.002934
Based on the data in Table 1, it is known that use of the encrypted communication system 100 of this disclosure may reduce the time required for encryption and decryption by hundreds of times in comparison to the conventional AES and RSA protocols regardless of the length of message. Apparently, the encrypted communication system 100 of this disclosure can significantly increase speeds of encryption and decryption.

(64) In the embodiment of this disclosure, the public key and the private key are generated based on the arithmetic function or classic strings, the p-vector, and the p-array which is essentially a vector, allowing encryption and decryption on a relatively large amount of data, and thereby enhancing speeds of encryption and decryption and ensuring security of data. The proposed encrypted communication system can ensure post-quantum security, namely, being capable of effectively resisting attack from post-quantum computers. Because of properties of the p-vector and p-array, hardware requirements for implementation of the embodiment are relatively low in terms of storage capacity and/or computation capability. The embodiment permits refresh of the public key without influencing use of the private key, enabling distributed key refresh for all users in the same network. Furthermore, since the arithmetic function ƒ used to create the private key is a function that can generate an infinite amount of data, multiple different public keys can be generated with only a single function.

(65) In the description above, for the purposes of explanation, numerous specific details have been set forth in order to provide a thorough understanding of the embodiment(s). It will be apparent, however, to one skilled in the art, that one or more other embodiments may be practiced without some of these specific details. It should also be appreciated that reference throughout this specification to “one embodiment,” “an embodiment,” an embodiment with an indication of an ordinal number and so forth means that a particular feature, structure, or characteristic may be included in the practice of the disclosure. It should be further appreciated that in the description, various features are sometimes grouped together in a single embodiment, figure, or description thereof for the purpose of streamlining the disclosure and aiding in the understanding of various inventive aspects, and that one or more features or specific details from one embodiment may be practiced together with one or more features or specific details from another embodiment, where appropriate, the practice of the disclosure.

(66) While the disclosure has been described in connection with what is (are) considered the exemplary embodiment(s), it is understood that this disclosure is not limited to the disclosed embodiment(s) but is intended to cover various arrangements included within the spirit and scope of the broadest interpretation so as to encompass all such modifications and equivalent arrangements.