发明名称 一种电子公文的加密方法
摘要 一种电子公文的加密方法,先进行密钥生成公钥和私钥,再加密成密文二元组,然后解密,最后进行秘密分配,本发明采用组合矩阵的公钥密码方法,其安全性与整数分解问题有关,但并不是直接基于整数分解,而是依赖于一类特殊的矩阵组合问题,因此,即使整数分解问题被有效地解决了,该算法仍然有效,加密和解密只需要进行几次简单的模乘法和模加法运算,故而系统实现的代价小,同时具有加密和解密速度快的优点。
申请公布号 CN102136911A 申请公布日期 2011.07.27
申请号 CN201110059847.3 申请日期 2011.03.11
申请人 西京学院 发明人 张善文;周争光;王宝仓
分类号 H04L9/32(2006.01)I;H04L9/30(2006.01)I 主分类号 H04L9/32(2006.01)I
代理机构 西安智大知识产权代理事务所 61215 代理人 贺建斌
主权项 1.一种电子公文的加密方法,其特征在于,包括以下步骤:第一步,密钥生成,密钥生成方法所涉及到的矩阵的维数记为n,一对公钥和私钥按如下方式产生:随机选取一个1024RSA模数N=pq,其中p和q是素数,而且|p|<sub>2</sub>=|q|<sub>2</sub>=512,随机选取一个n维矩阵A<maths num="0001"><![CDATA[<math><mrow><mi>A</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>a</mi><mn>11</mn></msub></mtd><mtd><msub><mi>a</mi><mn>12</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>a</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>a</mi><mn>21</mn></msub></mtd><mtd><msub><mi>a</mi><mn>22</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>a</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>a</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>a</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>a</mi><mi>nn</mi></msub></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>这里要求|a<sub>ij</sub>|<sub>2</sub>=59,矩阵A在R上是可逆的并把其逆矩阵记作A<sup>-1</sup>,随机选取四个矩阵C、D、E和F,记为<maths num="0002"><![CDATA[<math><mrow><mi>C</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>c</mi><mn>11</mn></msub></mtd><mtd><msub><mi>c</mi><mn>12</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>c</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>c</mi><mn>21</mn></msub></mtd><mtd><msub><mi>c</mi><mn>22</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>c</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>c</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>c</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>c</mi><mi>nn</mi></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0003"><![CDATA[<math><mrow><mi>D</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>d</mi><mn>11</mn></msub></mtd><mtd><mtext></mtext><msub><mi>d</mi><mn>12</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>d</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>d</mi><mn>21</mn></msub></mtd><mtd><msub><mi>d</mi><mn>22</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>d</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>d</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>d</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>d</mi><mi>nn</mi></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0004"><![CDATA[<math><mrow><mi>E</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>e</mi><mn>11</mn></msub></mtd><mtd><msub><mi>e</mi><mn>12</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>e</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>e</mi><mn>21</mn></msub></mtd><mtd><msub><mi>e</mi><mn>22</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>e</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>e</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>e</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>e</mi><mi>nn</mi></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths><maths num="0005"><![CDATA[<math><mrow><mi>F</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>f</mi><mn>11</mn></msub></mtd><mtd><msub><mi>f</mi><mn>12</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>f</mi><mrow><mn>1</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mtext></mtext><msub><mi>f</mi><mn>21</mn></msub></mtd><mtd><msub><mi>f</mi><mn>22</mn></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>f</mi><mrow><mn>2</mn><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>f</mi><mrow><mi>n</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>f</mi><mrow><mi>n</mi><mn>2</mn></mrow></msub></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msub><mi>f</mi><mi>nn</mi></msub></mtd></mtr></mtable></mfenced><mo>,</mo></mrow></math>]]></maths>其中,a<sub>ij</sub>,c<sub>ij</sub>,d<sub>ij</sub>,e<sub>ij</sub>,f<sub>ij</sub>分别为矩阵A,C,D,E,F的任意一个元素,且a<sub>ij</sub>,c<sub>ij</sub>,d<sub>ij</sub>,e<sub>ij</sub>,f<sub>ij</sub>∈Z<sub>N</sub>,满足下面两个条件<img file="FSA00000449506900016.GIF" wi="1100" he="141" /><img file="FSA00000449506900017.GIF" wi="1412" he="223" />再选取另外一个矩阵<maths num="0006"><![CDATA[<math><mrow><mi>A</mi><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msubsup><mi>a</mi><mn>11</mn><mo>&prime;</mo></msubsup></mtd><mtd><msubsup><mi>a</mi><mn>12</mn><mo>&prime;</mo></msubsup></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msubsup><mi>a</mi><mrow><mn>1</mn><mi>n</mi></mrow><mo>&prime;</mo></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>a</mi><mn>21</mn><mo>&prime;</mo></msubsup></mtd><mtd><msubsup><mi>a</mi><mn>22</mn><mo>&prime;</mo></msubsup></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msubsup><mi>a</mi><mrow><mn>2</mn><mi>n</mi></mrow><mo>&prime;</mo></msubsup></mtd></mtr><mtr><mtd></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd></mtd></mtr><mtr><mtd><msubsup><mi>a</mi><mrow><mi>n</mi><mn>1</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><msubsup><mi>a</mi><mrow><mi>n</mi><mn>2</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd><mtd><msubsup><mi>a</mi><mi>nn</mi><mo>&prime;</mo></msubsup></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中,<img file="FSA00000449506900022.GIF" wi="538" he="162" />γ<sub>ij</sub>∈Z<sub>N</sub>,矩阵A<sup>-1</sup>、C、D、E和F是模N可逆的,并把矩阵D和F模N的逆矩阵分别记作D<sup>-1</sup>和F<sup>-1</sup>,计算B=(b<sub>ij</sub>)<sub>n×n</sub>≡D<sup>-1</sup>A′(modN)G=(g<sub>ij</sub>)<sub>n×n</sub>≡D<sup>-1</sup>C(modN)H=(h<sub>ij</sub>)<sub>n×n</sub>≡F<sup>-1</sup>E(modN)则矩阵B、G和H以及模数N是公钥,由D、F、A<sup>-1</sup>、p以及q构成私钥;第二步,加密,将待加密明文M分为n块:m<sub>1</sub>,m<sub>2</sub>,...,m<sub>n</sub>,每块的长度记为|m<sub>i</sub>|=l,则M的长度记为|M|<sub>2</sub>=ln,按照下面算法加密明文M,发送者随机选取2n个整数r<sub>1</sub>,r<sub>2</sub>,...,r<sub>n</sub>,s<sub>1</sub>,s<sub>2</sub>,...,s<sub>n</sub>∈Z<sub>n</sub>,计算发送者密文为U=(u<sub>1</sub>,u<sub>2</sub>,...,u<sub>n</sub>)<sup>T</sup>=B(r<sub>1</sub>,r<sub>2</sub>,...,r<sub>n</sub>)<sup>T</sup>+G(m<sub>1</sub>,m<sub>2</sub>,...,m<sub>n</sub>)<sup>T</sup>,+(s<sub>1</sub>,s<sub>2</sub>,...,s<sub>n</sub>)<sup>T</sup>(modN)V=(v<sub>1</sub>,v<sub>2</sub>,...,v<sub>n</sub>)<sup>T</sup>=H(r<sub>n</sub>,r<sub>n-1</sub>,...,r<sub>1</sub>)<sup>T</sup>+(s<sub>n</sub>,s<sub>1</sub>,...,s<sub>n-2</sub>,s<sub>n-1</sub>)<sup>T</sup>(modN)则密文为二元组(U,V);第三步,解密,收到密文二元组(U,V)后,接收者按下列步骤获取明文M,T=(t<sub>1</sub>,t<sub>2</sub>,...,t<sub>n</sub>)<sup>T</sup>=DU+FV(modN)M=(t<sub>1</sub>,t<sub>2</sub>,...,t<sub>n</sub>)<sup>T</sup>=A<sup>-1</sup>(w<sub>1</sub>,w<sub>2</sub>,...,w<sub>n</sub>)<sup>T</sup>其中,<img file="FSA00000449506900031.GIF" wi="569" he="177" />第四步,秘密分配,采用Shamir门限秘密分割方案,Shamir门限方案按如下的一般方式构造,设GF(q)是一有限域,其中q是一大素数,满足q≥n+1,秘密s是在GF(q)/{0}上均匀选取的一个随机数,表示为s∈GF(q)/{0},k-1个系数a<sub>0</sub>,a<sub>1</sub>,…,a<sub>k-1</sub>的选取满足a<sub>i</sub>∈<sub>R</sub>GF(q)/{0}(i=1,2,...,k-1),在GF(q)上构造一个k-1次多项式f(x)=a<sub>0</sub>+a<sub>1</sub>x+…+a<sub>k-1</sub>x<sup>k-1</sup>设m个参与者为p<sub>1</sub>,p<sub>1</sub>,…,p<sub>m</sub>,记p<sub>i</sub>分配到的子秘密为f(i),如果任意k个参与者<img file="FSA00000449506900032.GIF" wi="219" he="86" />,(1≤i<sub>1</sub><i<sub>2</sub><…<i<sub>k</sub>≤m)要想得到秘密s,利用(i<sub>l</sub>,f(i<sub>l</sub>)|l=1,2,...,k)构造线性方程组:<maths num="0007"><![CDATA[<math><mfenced open='{' close=''><mtable><mtr><mtd><msub><mi>a</mi><mn>0</mn></msub><mo>+</mo><msub><mi>a</mi><mn>1</mn></msub><mrow><mo>(</mo><msub><mi>i</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>+</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>+</mo><msub><mi>a</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub><msup><mrow><mo>(</mo><msub><mi>i</mi><mn>1</mn></msub><mo>)</mo></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>i</mi><mn>1</mn></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><msub><mi>a</mi><mn>0</mn></msub><mo>+</mo><msub><mi>a</mi><mn>1</mn></msub><mrow><mo>(</mo><msub><mi>i</mi><mn>2</mn></msub><mo>)</mo></mrow><mo>+</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>+</mo><msub><mi>a</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub><msup><mrow><mo>(</mo><msub><mi>i</mi><mn>2</mn></msub><mo>)</mo></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>i</mi><mn>2</mn></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo></mtd></mtr><mtr><mtd><msub><mi>a</mi><mn>0</mn></msub><mo>+</mo><msub><mi>a</mi><mn>1</mn></msub><mrow><mo>(</mo><msub><mi>i</mi><mi>k</mi></msub><mo>)</mo></mrow><mo>+</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>&CenterDot;</mo><mo>+</mo><msub><mi>a</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub><msup><mrow><mo>(</mo><msub><mi>i</mi><mi>k</mi></msub><mo>)</mo></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><mo>=</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>i</mi><mi>k</mi></msub><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></math>]]></maths>因为i<sub>l</sub>(1≤l≤k)均不相同,所以由Lagrange插值公式构造多项式:<maths num="0008"><![CDATA[<math><mrow><mi>f</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></munderover><mi>f</mi><mrow><mo>(</mo><msub><mi>i</mi><mi>j</mi></msub><mo>)</mo></mrow><munderover><mi>&Pi;</mi><munder><mrow><mi>l</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>l</mi><mo>&NotEqual;</mo><mi>j</mi></mrow></munder><mi>k</mi></munderover><mfrac><mrow><mo>(</mo><mi>x</mi><mo>-</mo><msub><mi>i</mi><mi>l</mi></msub><mo>)</mo></mrow><mrow><mo>(</mo><msub><mi>i</mi><mi>j</mi></msub><mo>-</mo><msub><mi>i</mi><mi>l</mi></msub><mo>)</mo></mrow></mfrac><mrow><mo>(</mo><mi>mod</mi><mi>q</mi><mo>)</mo></mrow></mrow></math>]]></maths>从而得到秘密s=f(0),然而,参与者仅需知道f(x)的常数项f(0)而无需知道整个多项式f(x),所以仅根据下式就可求出s:<maths num="0009"><![CDATA[<math><mrow><mi>s</mi><mo>=</mo><msup><mrow><mo>(</mo><mo>-</mo><mn>1</mn><mo>)</mo></mrow><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msup><munderover><mi>&Sigma;</mi><mrow><mi>j</mi><mo>=</mo><mn>1</mn></mrow><mi>k</mi></munderover><mi>f</mi><mrow><mo>(</mo><msub><mi>i</mi><mi>j</mi></msub><mo>)</mo></mrow><munderover><mi>&Pi;</mi><munder><mrow><mi>l</mi><mo>=</mo><mn>1</mn></mrow><mrow><mi>l</mi><mo>&NotEqual;</mo><mi>j</mi></mrow></munder><mi>k</mi></munderover><mfrac><msub><mi>i</mi><mi>l</mi></msub><mrow><mo>(</mo><msub><mi>i</mi><mi>j</mi></msub><mo>-</mo><msub><mi>i</mi><mi>l</mi></msub><mo>)</mo></mrow></mfrac><mrow><mo>(</mo><mi>mod</mi><mi>q</mi><mo>)</mo></mrow></mrow></math>]]></maths>如果k-1个参与者要想获得秘密s,则构造出由k-1个方程构成的线性方程组,其中有k个未知量,对GF(q)中的任一值s<sub>0</sub>,可设f(0)=s<sub>0</sub>,由此可得第k个方程,并由Lagrange插值公式得出f(x),因此,对每一s<sub>0</sub>∈GF(q)都有一个惟一的多项式满足式s,所以已知k-1个子秘密得不到关于秘密s的任何信息,在电子公文加密、解密过程中,取l=450,A<sup>-1</sup>中的元素是有理数。
地址 710123 陕西省西安市长安区西京路1号