﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-&lt;table border="0" cellspacing="0" cellpadding="0" style="margin-left:5%;display:inline;height:30px;"&gt;&lt;tr&gt;&lt;td style="font-weight:bolder; font-size:16px; line-height:30px;"&gt;一年十二月&amp;nbsp&amp;nbsp谁主春秋&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-size:14px; line-height:30px;"&gt;关注：基础系统工程 密码学 人工智能&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;-随笔分类-Cryptography</title><link>http://www.cppblog.com/qinqing1984/category/21458.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 18 Mar 2026 07:47:18 GMT</lastBuildDate><pubDate>Wed, 18 Mar 2026 07:47:18 GMT</pubDate><ttl>60</ttl><item><title>再谈RSA的安全设计</title><link>http://www.cppblog.com/qinqing1984/archive/2026/03/17/230525.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Tue, 17 Mar 2026 15:03:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2026/03/17/230525.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230525.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2026/03/17/230525.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230525.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230525.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12pt;"><strong>从数学上考虑，主要是如下几点</strong></span></div>
<div>&nbsp; 1. 模数N的两个素因子p、q之间的距离（差的绝对值）要够大。这是为了防费马因子分解法，详见《<a target="_blank" href="http://www.cppblog.com/qinqing1984/archive/2023/09/28/230110.html">浅淡密码学几点安全性分析</a>》第一点</div>
<div>&nbsp; 2. p-1 和q-1 要有大的素因子，即它们的素因子分解中最小的素数都得够大。这是为了防Pollard p-1 因子分解法、重复加密攻击&nbsp;</div>
<div>&nbsp; 3. 解密指数d要比较大。这是为了防连分数方法攻击求解d。详见《<a target="_blank" href="http://www.cppblog.com/qinqing1984/archive/2024/04/04/230326.html">简单连分数攻击RSA的迭代次数分析</a>》</div>
<div>&nbsp; 4. N的选取应考虑它难以找到二次剩余即x<sup>2</sup>&#8801;y<sup>2</sup> mod N。这是为了防Dixon分解法、二次筛法</div>
<div></div>
<div><br />
<strong style="font-size: 12pt;">从工程上考虑，有以下几点</strong></div>
<div>&#8203;&nbsp; 5. RSA系统生成N不要重复。这是为了防共模攻击恢复明文</div>
<div>&nbsp; 6. 不同的N用不同的加密指数e，或不要加密相同的消息，或被加密的多个消息避免有仿射线性关系</div>
<div>&nbsp; 7. 避免暴露N的欧拉函数值。不然解一元二次方程可得到p、q</div>
<div>&nbsp; 8. 随机填充。给明文按一定规则填充随机串后加密，一定程度上可抗击选择明文与选择密文攻击<br />
<br />
<div><strong style="font-size: 12pt;"><br />进一步提升安全性的考虑</strong></div>
<div>&nbsp; 密钥生成KeyGen(&#954;):</div>
<div>&nbsp; &nbsp; &nbsp; (N, e, d) &#8592; GenRSA(&#954;);&nbsp;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;pk = (N, e), sk = (N, d)</div>
<div>&nbsp; <br />&nbsp; 加密过程E<sub>pk</sub> (M)、解密过程D<sub>sk</sub> (C<sub>1</sub>, C<sub>2</sub>)：</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;与抗攻击的安全性有关</div>
<div>&nbsp; <br />&nbsp; H：抗碰撞哈希函数<br />
</div>
<div></div>
<div>&nbsp;<br />&nbsp;为抗选择明文攻击，利用H来改造</div>
<div>&nbsp; &nbsp; &nbsp; E<sub>pk</sub>(M)：</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r &#8592;<sub>R</sub> Z<sub>N</sub><sup>*</sup></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;输出（r<sup>e</sup> mod N，H(r)&#8853;M）</div>
<div>&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; D<sub>sk</sub> (C<sub>1</sub>, C<sub>2</sub>)：</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = C<sub>1</sub><sup>d</sup> mod N</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;输出H(r)&#8853;C2</div>
<div>&nbsp; <br />&nbsp;为抗选择密文攻击（攻击利用RSA的乘法同态性），利用H与IND-CCA安全的私钥加密方案&lt;PrivGen, Enc, Dec&gt;来改造：</div>
<div>&nbsp; &nbsp; &nbsp; E<sub>pk</sub> (M)：</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r &#8592;<sub>R</sub> Z<sub>N</sub><sup>*</sup></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h = H(r)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 输出（r<sup>e</sup> mod N，Enc<sub>h</sub> (M)）</div>
<div>&nbsp; &nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp; D<sub>sk</sub> (C<sub>1</sub>, C<sub>2</sub>)：</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r = C<sub>1</sub><sup>d</sup> mod N</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; h = H(r)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 输出Dec<sub>h</sub>(C<sub>2</sub>)</div>
<div><br />&nbsp;以上改造后的两种RSA方案，是可证明安全的。但第一种不支持IND-CCA</div>
</div>
<div></div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230525.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2026-03-17 23:03 <a href="http://www.cppblog.com/qinqing1984/archive/2026/03/17/230525.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于格的行列式之解释</title><link>http://www.cppblog.com/qinqing1984/archive/2026/03/04/230518.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Wed, 04 Mar 2026 08:41:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2026/03/04/230518.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230518.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2026/03/04/230518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230518.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230518.html</trackback:ping><description><![CDATA[<div>先摘自文献[1]中Lattice-based Cryptography章节引用的结论<br />
<p>&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/lattice_crypto_preliminaries_1.png" alt="" /><br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/lattice_crypto_preliminaries_2.png" alt="" /><br />
&nbsp; <br />
再对上文三个结论稍作证明如下&nbsp;</p>
<div>
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/lattice_determent_conclusion_proof1.jpg" alt="" /><br />
<br />
&nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/lattice_determent_conclusion_proof2.jpg" alt="" />&nbsp;<br />
&nbsp;&nbsp;<br />
<div><span style="font-size: 11pt;"><strong>参考文献</strong></span></div>
<div>&nbsp; [1]&nbsp; Post-Quantum Cryptography</div>
<div>&nbsp; [2]&nbsp; 算法数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;裴定一 祝跃飞&nbsp;</div>
<div>&nbsp; [3]&nbsp; 高等代数&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;丘维声</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2026-03-04 16:41 <a href="http://www.cppblog.com/qinqing1984/archive/2026/03/04/230518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NTRU格密码一处恒等式的证明</title><link>http://www.cppblog.com/qinqing1984/archive/2026/01/27/230509.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Tue, 27 Jan 2026 10:00:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2026/01/27/230509.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230509.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2026/01/27/230509.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230509.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230509.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12pt;">先摘取文献[1]的NTRU密码算法描述</span>&nbsp;
<p>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ntru-lattice-crypto-tidentical-equation_pkc-algo.png" width="470" height="556" alt="" /><br />
&nbsp;<br />
&nbsp;<span style="font-size: 12pt;">矩阵T及T</span><sup style="font-size: 12pt;">*</sup><span style="font-size: 12pt;">的定义如下</span>&nbsp;</p>
<p>&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ntru-lattice-crypto-tidentical-equation_matrix-def1.png" width="469" height="252" alt="" /><br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ntru-lattice-crypto-tidentical-equation_matrix-def2.png" width="468" height="207" alt="" /><br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ntru-lattice-crypto-tidentical-equation_matrix-def3.png" width="482" height="337" alt="" />&nbsp;<br />
<br />
<span style="font-size: 12pt;">&nbsp;再给出证明过程</span>&nbsp;</p>
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ntru-lattice-crypto-tidentical-equation_proof.jpg" alt="" /><br />
<br />
<br />
<span style="font-size: 11pt;"><br />
参考文献</span><br />
&nbsp; &nbsp;[1]&nbsp; Post-Quantum Cryptography</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230509.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2026-01-27 18:00 <a href="http://www.cppblog.com/qinqing1984/archive/2026/01/27/230509.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于线性码的主要结论及应用</title><link>http://www.cppblog.com/qinqing1984/archive/2026/01/25/230508.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sun, 25 Jan 2026 12:30:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2026/01/25/230508.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230508.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2026/01/25/230508.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230508.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230508.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">符号定义</strong><br />
<p>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_symbol-define.png" width="586" height="150" alt="" /><br />
<br />
<strong style="font-size: 12pt;">主要结论<br />
</strong></p>
<p>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_theorem-proof1.jpg" width="574" height="715" alt="" /><br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_theorem-proof2.jpg" alt="" /><br />
<strong style="font-size: 12pt;"><br />
在密码学中的应用</strong><br />
</p>
<p>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_mceliece-pkc.png" width="466" height="422" alt="" /><br />
</p>
<div>&nbsp; &nbsp; 上述McEliece公钥算法成立的关键之一是<strong>G</strong><sup>pub</sup>=<strong>SGP</strong>。由前面的<strong>定理1</strong>可得出G<sup>pub</sup>与G等价，<br />
&nbsp;但隐藏了码结构，另由于矩阵分解G<sup>pub</sup>得到S和P是困难的，因为P随机且LU分解变形不唯一，<br />&nbsp;当n和t较大时，Goppa码的生成矩阵是天文数字。从而增加了密码分析的难度<br />
<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_syndrome-of-codeword.png" width="465" height="491" alt="" /><br />
<div>&nbsp;上述红色下划线处的结论，其根据是<strong>推论1<br />
</strong><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_csd-cf-problems.png" width="459" height="490" alt="" /><br />
&nbsp; 这里的线性码下界定义本质跟<strong>定理7</strong>一样，从校验矩阵H的所有列向量中，选取0个向量（即向量<strong>0</strong>）生成的线性组合数 +<br /> 选取1个线性无关向量生成的线性组合数 + 选取2个无关向量生成的线性组合数 + &#8230; + <br />选取d<sub>0</sub>-1个无关向量生成的线性组合数，不超过r个无关向量生成的线性组合总数。下面解释了红色下划线处的结论<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/linearcode_conclusions_apply-csd-cf-explain.jpg" width="480" height="26" alt="" /><br />
<br /><br />
<div><strong style="font-size: 11pt;">参考文献</strong>&nbsp;</div>
<div>&nbsp;[1]&nbsp;高等代数&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;丘维声</div>
<div>&nbsp;[2] Finite fields&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Rudolf Lidl&nbsp; Harald Niederreiter</div>
<div>&nbsp;[3] Post-Quantum Cryptography</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230508.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2026-01-25 20:30 <a href="http://www.cppblog.com/qinqing1984/archive/2026/01/25/230508.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于LLL算法的补充证明</title><link>http://www.cppblog.com/qinqing1984/archive/2025/09/28/230467.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sun, 28 Sep 2025 09:43:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2025/09/28/230467.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230467.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2025/09/28/230467.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230467.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230467.html</trackback:ping><description><![CDATA[<div>先摘录文献[1]中的LLL算法描述流程，及LLL约化基的定义&nbsp;<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/LLL-algorithm1.png" width="497" height="133" alt="" /><br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/LLL-algorithm2.png" width="492" height="571" alt="" /><br />
<br />
<div>LLL约化基的定义如下（文献[1]定义13.12）<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/LLL-Reduced-basis.png" width="438" height="90" alt="" /><br />
<br />
<div>再证明上图红色方框三行伪代码的正确性（其它部分文献[1]已讲得比较具体）<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/LLL-algorithm-additional-proof.jpg" alt="" /><br />
<br />
<div><strong style="font-size: 12pt;"><br />
参考文献</strong>&nbsp;</div>
<div>&nbsp; [1] 算法数论&nbsp; &nbsp; &nbsp; &nbsp; 裴定一 祝跃飞</div>
<div>&nbsp; [2] 高等代数&nbsp; &nbsp; &nbsp; &nbsp; 丘维声&nbsp;</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230467.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2025-09-28 17:43 <a href="http://www.cppblog.com/qinqing1984/archive/2025/09/28/230467.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于分圆域的一般结论</title><link>http://www.cppblog.com/qinqing1984/archive/2025/07/28/230452.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Mon, 28 Jul 2025 04:01:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2025/07/28/230452.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230452.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2025/07/28/230452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230452.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230452.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cyclotomic-field-general-conclusion1.jpg" width="622" height="955" alt="" /><br />
<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cyclotomic-field-general-conclusion2.jpg" width="652" height="835" alt="" /><br />
<br />
<div><strong style="font-size: 11pt;"><br />参考文献</strong></div>
<div>&nbsp; [1]代数与数论&nbsp; &nbsp; &nbsp; &nbsp;李超&nbsp; &nbsp; &nbsp;周悦</div>
<div>&nbsp; [2]抽象代数II&nbsp; &nbsp; &nbsp; &nbsp;徐明曜&nbsp; 赵春来</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2025-07-28 12:01 <a href="http://www.cppblog.com/qinqing1984/archive/2025/07/28/230452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个欧拉数整除问题的两种证法</title><link>http://www.cppblog.com/qinqing1984/archive/2025/06/20/230447.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Fri, 20 Jun 2025 10:41:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2025/06/20/230447.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230447.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2025/06/20/230447.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230447.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230447.html</trackback:ping><description><![CDATA[<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/two-way-proofs-of-one-euler-number-proposition1.jpg" alt="" /><br />
<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/two-way-proofs-of-one-euler-number-proposition2.jpg" alt="" /><br />
<br />
<div><strong style="font-size: 11pt;"><br />
参考文献</strong></div>
<div>&nbsp; [1] 代数学基础与有限域&nbsp; &nbsp; &nbsp; &nbsp;林东岱</div>
<div>&nbsp; [2] 抽象代数&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;赵春来 徐明曜</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230447.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2025-06-20 18:41 <a href="http://www.cppblog.com/qinqing1984/archive/2025/06/20/230447.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有限域上的特征与指数和之扩展</title><link>http://www.cppblog.com/qinqing1984/archive/2025/06/05/230441.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Thu, 05 Jun 2025 01:30:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2025/06/05/230441.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230441.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2025/06/05/230441.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230441.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230441.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 12pt;">符号含义</strong>&nbsp;<strong style="font-size: 12pt;"><br />
</strong><strong style="font-size: 12pt;">&nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-fields-characters-expsum-symbol-list.png" alt="" /><br />
<br />
</strong>
<div><strong style="font-size: 12pt;">关于特征的结论</strong>&nbsp;<strong style="font-size: 12pt;"><br />
</strong><strong style="font-size: 12pt;">&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-fields-characters-expsum-char-conclusion1.jpg" width="602" height="684" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-fields-characters-expsum-char-conclusion2.jpg" width="603" height="1040" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-fields-characters-expsum-char-conclusion3.jpg" width="619" height="1015" alt="" /><br />
<br />
</strong>
<div><strong style="font-size: 12pt;">关于指数和的结论</strong>&nbsp;<strong style="font-size: 12pt;"><br />
</strong><strong style="font-size: 12pt;">&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-fields-characters-expsum-expsum-conclusion.jpg" width="638" height="995" alt="" /></strong><br />
<div><strong style="font-size: 11pt;">参考文献</strong><br />
</div>
<div>&nbsp; &nbsp;[1] 代数学基础与有限域&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;林东岱</div>
<div>&nbsp; &nbsp;[2] 代数与数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 李超 周悦</div>
<div>&nbsp; &nbsp;[3] 关于群的一些结论及应用&nbsp; &nbsp;本人</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2025-06-05 09:30 <a href="http://www.cppblog.com/qinqing1984/archive/2025/06/05/230441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二元二次型的相似变换、正定性与正交分解</title><link>http://www.cppblog.com/qinqing1984/archive/2025/04/25/230436.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Fri, 25 Apr 2025 11:05:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2025/04/25/230436.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230436.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2025/04/25/230436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230436.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230436.html</trackback:ping><description><![CDATA[<div>&nbsp; &nbsp;本文主要阐述用两种方法判断给定两个二元二次型是否相似，相似情况下的具体变换。<br />
相似变换如果确定了，也利于判断正定性，因为相似二次型的正定性相同。最后讲到了正交分解，<br />
给出怎么求相似的整数对角矩阵<br />
<br />
<div><span style="font-size: 12pt;"><strong>基本定义</strong></span></div>
<div>&nbsp; 下述定义来自文献[1] 12.1节，有所扩展&nbsp;<br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/binary-quadric-form-basic-definition.png" alt="" /><br />
<strong><br />
<span style="font-size: 12pt;">变换求解</span></strong></div>
<div>&nbsp; 先来看运用解方程的方法&nbsp;<br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/binary-quadric-form-similar-transform-solve-equation.jpg" width="555" height="919" alt="" /><br />
<br />
<div>&nbsp;<br />
&nbsp;再来看用矩阵的观点方法，求解变换。这种方法更适合求解到对角型的变换<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/binary-quadric-form-similar-transform-matrix-method.jpg" alt="" /><br />
&nbsp;<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/binary-quadric-form-similar-transform-matrix-method-example.jpg" alt="" /><br />
<br />
<span style="font-size: 12pt;"><strong>正交分解</strong></span>&nbsp;<span style="font-size: 12pt;"><strong><br />
</strong></span>
<span style="font-size: 11pt;">&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/binary-quadric-form-orthogonal-decomposition-principle.jpg" alt="" /><br />
<br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/binary-quadric-form-orthogonal-decomposition-example.jpg" width="515" height="906" alt="" /><br />
<br />
<strong>
参考文献</strong></span>&nbsp;
<div>&nbsp; &nbsp;[1] 华罗庚文集数论卷2</div>
<div>&nbsp; &nbsp;[2] 高等代数&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;丘维声</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230436.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2025-04-25 19:05 <a href="http://www.cppblog.com/qinqing1984/archive/2025/04/25/230436.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于群的一些结论及应用</title><link>http://www.cppblog.com/qinqing1984/archive/2025/04/22/230435.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Tue, 22 Apr 2025 13:18:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2025/04/22/230435.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230435.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2025/04/22/230435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230435.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230435.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12pt;">【<strong>命题1</strong>】 所有群同态的原像个数相同，即为核的大小</span>&nbsp;<span style="font-size: 12pt;"><br />
</span>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/group-homomorphism-origimg-num-same-proof.png" alt="" />&nbsp;&nbsp;<br />
<br />
<div>&nbsp; 下面看下这个结论在文献[1]中3.2节的应用&nbsp;</div>
&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/group-homomorphism-origim-count-same-apply.png" width="463" height="411" alt="" /><br />
<br />
<div><span style="font-size: 12pt;">【<strong>命题2</strong>】所有元素阶小于等于2 的群为交换群，且其阶为2的整数幂</span>&nbsp;<span style="font-size: 12pt;"><br />
</span>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/group-all-element-order-le-two-swap-count-proof.png" width="586" height="463" alt="" /><br />
<div>&nbsp;该结论在<a href="https://zhuanlan.zhihu.com/p/644888274" target="_blank">https://zhuanlan.zhihu.com/p/644888274</a>中的推论2.2证明中用到<br />
<br />
<div><span style="font-size: 12pt;">【<strong>命题3</strong>】群中任一元的相对于正规子群的指数次幂属于正规子群，2阶正规子群必</span></div>
<div><span style="font-size: 12pt;">属于群的中心</span><br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/regular-subgroup-element-two-order-belongto-center.png" width="460" height="334" alt="" /><br />
<br />
<div>
<div><span style="font-size: 12pt;"><strong>【定理1】</strong>模奇合数的既约乘法群，其中雅可比符号为1的元素构成它的子群，其阶为</span></div>
<div><span style="font-size: 12pt;">既约乘法群群阶的一半<br />
</span><span style="font-size: 14.6667px;">&nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/group-odd-composite-number-jacobi-eqone-subgroup-order.png" alt="" />&nbsp;&nbsp;<br /><br />
</span></div>
<div><strong style="font-size: 12pt;">【定理2】</strong><span style="font-size: 12pt;">设G是群，H、K是有限子群，则HK的大小等于H的阶与K的阶乘积除以H与K交群的阶</span>&nbsp;<span style="font-size: 12pt;"><br /></span>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/two-finite-subgroups-product-size-proof.png" width="438" height="238" alt="" /><br />
</div>
<strong style="font-size: 11pt;"><br /><br />参考文献</strong></div>
<div>&nbsp; [1] 椭圆曲线及其在密码学中的应用&#8212;导引&nbsp; Andreas Enge</div>
<div>&nbsp; [2] 抽象代数I&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 赵春来 徐明曜<br />
&nbsp; [3] 华罗庚文集数论卷2</div>
<div>&nbsp; [4] 组合数学&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;冯荣权 宋春伟</div>
</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2025-04-22 21:18 <a href="http://www.cppblog.com/qinqing1984/archive/2025/04/22/230435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不定方程的代数数论解法</title><link>http://www.cppblog.com/qinqing1984/archive/2024/12/23/230411.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Mon, 23 Dec 2024 03:33:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/12/23/230411.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230411.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/12/23/230411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230411.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230411.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 12pt;">符号含义与适用前提</strong><br />
<p>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-term-premise.png" width="591" height="246" alt="" /><br />
<br />
<span style="font-size: 12pt;"><strong><br />
二次域的基本结论</strong></span>&nbsp;</p>
<p>
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-quadratic-field-conclusion.png" width="600" height="551" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-quadratic-field-conclusion2.png" width="599" height="272" alt="" /><br />
<br />
</p>
<div><strong style="font-size: 12pt;">x<sup>2</sup>-dy<sup>2</sup>=</strong><strong style="font-size: 12pt;">&#177;1</strong>&nbsp; &nbsp;</div>
<div>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-pell-solve.jpg" alt="" /><br />
<br />
&nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-pell-solve2.jpg" width="635" height="955" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-pell-solve3.jpg" width="623" height="1026" alt="" /><strong style="font-size: 12pt;"><br />
x<sup>2</sup>&nbsp;+ d&nbsp;= y<sup>3</sup></strong>&nbsp;&nbsp;</div>
<div>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-x2-d-y3-solve.jpg" width="586" height="802" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-x2-d-y3-solve2.jpg" width="574" height="1000" alt="" /><br />
&nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-x2-d-y3-solve3.jpg" alt="" />&nbsp;<br />
<br />
<div><strong style="font-size: 12pt;"><br />
x<sup>2</sup> + y<sup>2</sup> = n</strong>&nbsp; &nbsp;</div>
<div>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-two-quadratic-sum-solve.jpg" alt="" /><br />
<br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/diophantine-equation-two-quadratic-sum-solve2.jpg" alt="" /><br />
<br />
<br />
<div><strong>参考文献</strong>&nbsp;<strong><br />
</strong><strong>
&nbsp; &nbsp;</strong>[1] 代数与数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;李超&nbsp; 周悦</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-12-23 11:33 <a href="http://www.cppblog.com/qinqing1984/archive/2024/12/23/230411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于椭圆曲线的验证计算</title><link>http://www.cppblog.com/qinqing1984/archive/2024/11/10/230402.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sun, 10 Nov 2024 13:45:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/11/10/230402.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230402.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/11/10/230402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230402.html</trackback:ping><description><![CDATA[<span style="font-size: 13pt;"><strong>符号含义</strong></span>&nbsp;
<div>&nbsp; &nbsp; E&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 表示满足椭圆曲线Weierstrass方程上的点群</div>
<div>&nbsp; &nbsp; K&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 代数闭域，用来限制Weierstrass方程的系数与E中的点</div>
<div>&nbsp; &nbsp; E(K)&nbsp; &nbsp; &nbsp; &nbsp; 定义在K上的点群E</div>
<div>&nbsp; &nbsp; E/K&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;定义在K上的椭圆曲线E</div>
<div>&nbsp; &nbsp; End(E)&nbsp; &nbsp; E上的自同态环<br />
<br />
<br />
<span style="font-size: 13pt;"><strong>域扩张分析</strong></span><span style="background-color: #c0c0c0; font-size: 1px;">&nbsp;</span><span style="font-size: 13pt;"><strong><br /></strong></span>
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-field-extention-analysis.png" alt="" /><br />
<br />
<div><span style="font-size: 13pt;"><strong>End(E)模与Z代数</strong></span>&nbsp;<span style="font-size: 14pt;"><br />
</span><span>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-ende-module-z-algebra.png" width="550" height="760" alt="" /><br />
<br />
</span>
<div><span style="font-size: 13pt;"><strong>极点首项系数</strong></span>&nbsp;<span style="font-size: 14pt;"><br />
</span><span style="font-size: 14pt;">&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-acnode-leading-term-coefficient-theory.jpg" width="571" height="970" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-acnode-leading-term-coefficient-example.png" width="562" height="831" alt="" /><br />
</span>
<div><span style="font-size: 13pt;"><br />
<strong>
除子映射及同构</strong></span>&nbsp;<strong style="font-size: 1px;">&nbsp;</strong></div>
<div>
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-divisor-map-isomorphism.jpg" width="560" height="918" alt="" /><br />
<br />
<div><span style="font-size: 13pt;"><strong>同种映射同态性的解释</strong></span>&nbsp;<span style="font-size: 14pt;"><br />
</span><span>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-isogeny-homomorphism-theorem.PNG" width="453" height="388" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-principal-divisor-corollary.PNG" width="454" height="218" alt="" /><br />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-isogeny-map-homomorphism-explain.png" width="531" height="238" alt="" /><br />
<br />
</span>
<div><span style="font-size: 13pt;"><strong>Hasse定理之引理证明的补充</strong></span>&nbsp;&nbsp;</div>
<div>&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-hasse-lemma-proof-supplement.jpg" width="591" height="958" alt="" /><br />
<br />
<div><span style="font-size: 13pt;"><strong>挠曲线及其个数</strong></span>&nbsp; &nbsp;</div>
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-torsional-curve-and-num.jpg" width="584" height="978" alt="" /><br />
<br />
<div><strong><span style="font-size: 13pt;">有限域上的椭圆曲线</span>&nbsp;</strong>&nbsp;
<div><span style="font-size: 11pt;">&nbsp;&nbsp;<strong>一种确定型群阶计算法</strong></span>&nbsp;<span style="font-size: 12pt;"><br />
</span><span>&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-odd-prime-field-calc-ecgrouporder-algo.png" width="563" height="507" alt="" /><br />
</span><span style="font-size: 12pt;">&nbsp;<br />
</span><span style="font-size: 11pt;">&nbsp; <strong>奇素域上的算法应用</strong></span><strong>&nbsp;</strong><span style="font-size: 12pt;"><br />
</span><span>&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-odd-prime-field-calc-ecgrouporder-algo-apply.png" width="571" height="380" alt="" /><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-odd-prime-field-calc-ecgrouporder-algo-apply2.jpg" width="571" height="1019" alt="" /><br />
<br />
</span>
<div><span style="font-size: 11pt;">&nbsp;<strong>GF域上的群阶计算</strong></span>&nbsp;&nbsp;</div>
<div><span>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-gf-calc-grouporder-weil-example.jpg" width="543" height="995" alt="" /><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-gf-calc-grouporder-weil-example2.jpg" width="571" height="1019" alt="" /><br />
<br />
</span>
<div><span style="font-size: 13pt;"><strong>Schoof算法正确性根本</strong></span>&nbsp; &nbsp;</div>
<div>&nbsp; &nbsp; 一种计算椭圆曲线群的阶的确定型多项式时间算法，确定型是因为算法内部没有随机选择/概率抛币操作，多项式时间是因为域<em>k</em>的乘法与求逆总次数是O((logq)^6)<br />
（<em>q</em>为<em>k</em>的大小，乘法与求逆相对加减运算显著耗时）。具体原理及流程详见参考文献[1]中5.2节。这里给出笔者的一些思考
<div>&#8203;&nbsp; &nbsp; &nbsp;1. Hasse定理（Frobenius自同态方程式）在扭点群上的限制亦成立，这决定了<em>t</em>模<em>l</em>的一个同余方程成立，且在模l的最小非负剩余系下解是唯一的</div>
<div>&#8203;&nbsp; &nbsp; &nbsp;2. 孙子定理保证了某取值范围内的一个<em>t</em>模<em>L</em>（<em>L</em>为各素因子l的乘积）的唯一解，即由<em>t</em>模<em>L</em>各个素因子<em>l</em>的同余方程构成的同余方程组的解是唯一的</div>
<div>&#8203;&nbsp; &nbsp; &nbsp;3. <em>L</em>必须大于<em>t</em>取值上限的2倍。这是为了算法求得的解满足上述2（否则在更小的L内得到的解不唯一，因<em>L</em>与<em>t</em>上限或下限间的某数可以与<em>t</em>模<em>L</em>同余）</div>
<div>&#8203;&nbsp; &nbsp; &nbsp;4. 素因子<em>l</em>的选择排除2与椭圆曲线特征<em>p</em>。这是因为算法构造所依赖的一个引理之前提条件：为奇素数保证<em>l</em>次除子多项式属于<em>k</em>[X]，即引理论断有意义；<br />
&nbsp; &nbsp; &nbsp; &nbsp;不等于<em>p</em>保证检测一个多项式f是否零多项式的充要条件成立，即可以用<em>l</em>次除子多项式去整除<em>f</em>来判断。另l为素数保证了与其它除子多项式（及其幂次）互素<br />
&nbsp; &nbsp; &nbsp;另外发现了算法的一处瑕疵，即第4步预计算除子多项式与Frobenius自同态的复合少了两个值，这导致第5步可能崩溃，当依赖的后续两个复合多项式没被计算时。<br />
&nbsp; 这个纠正可通过修改第4步扩大2个值，或第5步通过除子多项式的递推公式按需计算</div>
<br />
<div><strong><span style="font-size: 13pt;">扭点的阶计算正确性根本</span></strong>&nbsp;<strong>&nbsp;</strong></div>
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-calc-torsion-point-order-algo-correctness-analysis.png" width="599" height="374" alt="" /><br />
<br />
<div><span style="font-size: 13pt;"><strong>在密码学中的应用</strong></span><span style="background-color: #c0c0c0; font-size: 1px;">&nbsp;</span>&nbsp;</div><div>
&nbsp; &nbsp;<span style="font-size: 11pt;"> <strong>选取原则</strong></span>&nbsp;&nbsp;</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; 1. 排除超奇异椭圆曲线。这是为避免<span style="color: #ff6600;">MOV</span>等约化攻击，约化攻击时间复杂度是亚指数</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; 2. 有限域的选择要使<em>E</em>(<em>F</em><sub><em>q</em></sub>)的群阶足够大。这是为了缓解<span style="color: #ff00ff;">Shanks</span>及<span style="color: #ff00ff;">Pollard &#961;</span>攻击</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; 3. <em>E</em>(<em>F</em><sub><em>q</em></sub>)存在阶为大素数的子群。这是为了抵抗<span style="color: #ff00ff;">Pohlig-Hellman</span>攻击</div>
<div>&nbsp; &nbsp; &nbsp; 对于第1点，就排除了char(<em>K</em>)=2或3且<em>j</em>(<em>E</em>)=0对应的如下标准形式曲线</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Y<sup>2</sup>+&#945;<sub>3</sub>Y=X<sup>3</sup>+&#945;<sub>4</sub>X+&#945;<sub>6</sub>（&#945;<sub>3</sub>&#8800;0） 与&nbsp; Y<sup>2</sup>=X<sup>3</sup>+&#945;<sub>4</sub>X+&#945;<sub>6</sub>&nbsp;<br />
&nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp; <span style="font-size: 11pt;">&nbsp;<strong>一种典型方案</strong></span><span style="background-color: #c0c0c0; font-size: 1px;"><strong>&nbsp;</strong></span><span style="font-size: 12pt;"><br />
</span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;椭圆曲线及有限域的选择使得|<em>E</em>(<em>F<sub>q</sub></em>)|=cm，且char(<em>F<sub>q</sub></em>) &#8740; <em>q</em>+1-<em>cm</em>。其中<em>m</em>是一个大素数（通常不低于256位二进制长度，提供中长期安全性），<em>c</em>小于<em>m</em>。<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m阶子群的生成元可通过以下方法确定：随机选择<em>E</em>上的一个有理点<em>P</em>，如果<em>Q</em>=<em>cP</em>为零元（即无穷远点），则重复选择，直到其不等于零元。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一旦找到了生成元，那么子群就可以构造出来了。下面分析正确性&nbsp;&nbsp;</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/ec-cryptography-apply-typical-scheme.png" width="472" height="364" alt="" /><br />
<br />
<br />
<div><span style="font-size: 12pt;"><strong>参考文献</strong></span></div>
<div>&nbsp; [1] 椭圆曲线及其在密码学中的应用&#8212;导引&nbsp; &nbsp; &nbsp; Andreas Enge</div>
<div>&nbsp; [2] 算法数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;裴定一、祝跃飞&nbsp;</div>
<div>&nbsp; [3] The Arithmetic of Elliptic Curves&nbsp; &nbsp; &nbsp; &nbsp; Joseph H. Silverman</div>
<div>&nbsp; [4] 标识密码学&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 程朝辉</div>
<div>&nbsp; [5] 代数学基础与有限域&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;林东岱<br />
<div>&nbsp; [6] 抽象代数I&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 赵春来 徐明曜</div>
<div>&nbsp; [7] 代数与数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 李超&nbsp; &nbsp;周悦</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-11-10 21:45 <a href="http://www.cppblog.com/qinqing1984/archive/2024/11/10/230402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>不可约多项式判别算法的改正</title><link>http://www.cppblog.com/qinqing1984/archive/2024/09/07/230392.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 07 Sep 2024 15:07:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/09/07/230392.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230392.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/09/07/230392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230392.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230392.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 12pt;">原本算法<br />
</strong>
<div>&nbsp; &nbsp; 摘抄<em>参考文献1</em>中附录的算法流程如下</div>
<strong style="font-size: 12pt;">&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/Irreducible-polynomial-decide-original-algo.PNG" width="547" height="298" alt="" /><br />
<br />
</strong>
<div><strong style="font-size: 12pt;">例子测验</strong><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/Irreducible-polynomial-decide-example-test-prime-field.PNG" width="558" height="442" alt="" /><br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/Irreducible-polynomial-decide-example-test-extend-field.PNG" width="556" height="367" alt="" /><br />
<div><br />
<strong style="font-size: 12pt;">改正后的算法</strong></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;改正之前，先理清原本算法判别不可约多项式所用的原理。其原理是若f(x)可约，当且仅当存在次数i&lt;=d=[deg(f(x))/2]的不可约因子g(x)，而此时gcd(x<sup>q^i</sup>-x, f(x))&#8800;1。<br />
&nbsp; &nbsp;根据<em>参考文献2</em>（详见如下定理），x<sup>q^i</sup>-x是所有i次不可约多项式的乘积，因此它必定包含g(x)而与f(x)存在公因子。不可约判别算法的思想应该是遍历次数1到d的所有不可约多项式<br />
&nbsp;（没必要检测大于d的不可约多项式，因为若f(x)可约则其分解因子中必定存在不大于d的不可约多项式），检测输入多项式与它们是否存在公因子。所以这个原理是正确的，只是实现不对，<br />
&nbsp; &nbsp;略作改正如下（类c语言描述）<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/Irreducible-polynomial-decide-correct-algo.PNG" width="602" height="420" alt="" /><br />
<div><br />
<strong style="font-size: 12pt;">重新测验</strong><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/Irreducible-polynomial-decide-example-retest-prime-field.PNG" alt="" /><br /><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/Irreducible-polynomial-decide-example-retest-extend-field.PNG" width="452" height="838" alt="" /><br />
<br />
<br />
<div><strong style="font-size: 11pt;">参考文献</strong></div>
<div>&nbsp; &nbsp;[1] 算法数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;裴定一、祝跃飞</div>
<div>&nbsp; &nbsp;[2] 代数学基础与有限域&nbsp; &nbsp;林东岱</div>
</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-09-07 23:07 <a href="http://www.cppblog.com/qinqing1984/archive/2024/09/07/230392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>论证有限域上平方根的求解</title><link>http://www.cppblog.com/qinqing1984/archive/2024/08/30/230390.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Fri, 30 Aug 2024 14:22:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/08/30/230390.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230390.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/08/30/230390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230390.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230390.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12pt;"><strong>通用算法<br />
</strong></span>
<div>&nbsp; &nbsp;先摘抄参考文献[1]中的算法流程如下<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prove-finitefield-squareroot-slove-algo.PNG" alt="" /><br />
<br />
<div><strong style="font-size: 11pt;">&nbsp; &nbsp;正确性分析<br />
&nbsp; &nbsp; &nbsp; </strong>下面证明以上算法用到的事实结论，提炼为如下几个引理<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prove-finitefield-squareroot-slove-lemma.PNG" alt="" /><br />
&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prove-finitefield-squareroot-slove-lemma2.PNG" alt="" /><br />
<br />
&nbsp; &nbsp;<strong style="font-size: 11pt;">算法构造思想<br />
</strong>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;用到二次剩余知识，即一个待求平方元ɑ可以且只能表示为两个平方因子的乘积，其中一因子为任意随机选取的非平方因子&#946;的偶数幂，<br />
&nbsp; &nbsp; &nbsp; 另一因子为叶子群H的一元素r，H作为陪集划分根群（有限域乘法群）得到&#946;生成的集合即商群G/H的一个代表元系。这样一来，将开方转化为&#946;与r的乘方运算，<br />
&nbsp; &nbsp; &nbsp; 迭代的过程就是为求那个具体的代表元&#946;<sup>e</sup>中的指数e（注意e必为偶数），从G<sub>s-2</sub>到G<sub>0</sub>=H，迭代结束后r被唯一确定，r的开方等于r的(t+1)/2次方（因为t是H的阶且为奇数，r<sup>t+1</sup>=r）。<br />&nbsp; &nbsp; &nbsp; 观察算法流程，可以发现如果分解q-1后得到s=1，那么就没必要选取非平方元&#946;了（这时令&#946;=1），直接跳到第6步得到结果。仅当s&#8800;1才随机选取&#946;。这样改进后可加快算法运行<br /><br />
&nbsp; &nbsp;<strong style="font-size: 11pt;">例子测验<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prove-finitefield-squareroot-slove-example.PNG" alt="" /><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prove-finitefield-squareroot-slove-example2.PNG" alt="" /><br />
<br />
</strong>
<div><span style="font-size: 12pt;"><strong>特殊算法<br />
&nbsp; &nbsp;</strong></span>当q是素数且q&#8801;3(mod 4)时，存在更快的算法及测验如下&nbsp;</div>
<strong style="font-size: 11pt;">&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prove-finitefield-squareroot-slove-special-algo.PNG" alt="" /></strong><br />
<div>
<div><br />
<br />
<strong style="font-size: 10.5pt;">参考文献</strong></div>
<div>&nbsp; &nbsp;[1]&nbsp; 算法数论&nbsp; &nbsp;裴定一、祝跃飞</div>
</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-08-30 22:22 <a href="http://www.cppblog.com/qinqing1984/archive/2024/08/30/230390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求解离散对数问题的Terr算法</title><link>http://www.cppblog.com/qinqing1984/archive/2024/08/15/230388.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Thu, 15 Aug 2024 14:35:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/08/15/230388.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230388.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/08/15/230388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230388.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230388.html</trackback:ping><description><![CDATA[<div><span style="font-size: 12pt;"><strong>基本原理</strong></span>&nbsp;&nbsp;<br />
<span style="font-size: 12pt;">&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/terr_from_shanks.png" alt="" /><br />
<br />
</span>
<div>&nbsp; &nbsp;再来看Terr算法用到的如下定理<br />
&nbsp; &nbsp; &nbsp;<span style="font-size: 11pt;"><strong>定理</strong></span> （基于<em>参考文献1</em>改正后的描述）<span style="color: #ff6600;">对每一正整数t，存在唯一确定的一组整数k和j，0&lt;=k&lt;j，使得t=T</span><sub style="color: #ff6600;">j+1</sub><span style="color: #ff6600;">-k，其中T</span><sub style="color: #ff6600;">0</sub><span style="color: #ff6600;">=0，T</span><sub style="color: #ff6600;">n</sub><span style="color: #ff6600;">=T</span><sub style="color: #ff6600;">n-1</sub><font color="#ff6600">+n-1，n&gt;=1</font><br />
<font color="#ff6600">&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/terr_threorem_proof.png" alt="" /></font><br />
<div>&nbsp; &nbsp; &nbsp;如果t=0，那么j在区间[0,1)，故只能取0，此时k=0与条件k&lt;j矛盾，若允许k=j，则不保证唯一，比如t=1 =&gt; j=1, k=0 或 <span style="color: #ff0000;">j=2, k=2。</span><br />
&nbsp; &nbsp; &nbsp;所以<em>参考文献1</em>中原来定理的描述&#8220;对每一非负整数t&#8221;是错误的。下面列举一些实例验证j与k的唯一解</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;t=1&nbsp; =&gt;&nbsp; j=1, k=0</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=2&nbsp; =&gt;&nbsp; j=2, k=1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=3&nbsp; =&gt;&nbsp; j=2, k=0</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=4&nbsp; =&gt;&nbsp; j=3, k=2</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=5&nbsp; =&gt;&nbsp; j=3, k=1</div>
<div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t=6&nbsp; =&gt;&nbsp; j=3, k=0<br />
<div>&nbsp;&nbsp;<strong style="font-size: 12pt;">&nbsp;<br />
</strong><strong style="font-size: 12pt;"><br />算法伪代码</strong><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/terr_algo_pseudo_code.png" alt="" /><br />
<div><p><br /></p><strong style="font-size: 12pt;">例子测验<br />
</strong>&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/terr_demo_test.png" alt="" /><br />
<br />
<div><strong style="font-size: 10.5pt;"><br />
参考文献</strong></div>
<div>&nbsp; &nbsp;[1] 代数学基础与有限域&nbsp; &nbsp;林东岱</div>
</div>
</div>
</div>
</div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-08-15 22:35 <a href="http://www.cppblog.com/qinqing1984/archive/2024/08/15/230388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单私钥加密构造的验证及安全性分析</title><link>http://www.cppblog.com/qinqing1984/archive/2024/06/29/230365.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 29 Jun 2024 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/06/29/230365.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230365.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/06/29/230365.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230365.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230365.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">私钥分组加密</strong>&nbsp;&nbsp;<br />
<dt></dt><dt><strong style="font-size: 12pt;">
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-block-cipher-base-prf.PNG" width="492" height="592" alt="" /></strong></dt><strong style="font-size: 12pt;">
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-block-cipher-base-prf_proof-semantic-security.PNG" width="488" height="367" alt="" /><br />
&nbsp; &nbsp;</strong>上图的证明中，r<sup>(j)</sup>两两不同的概率计算是关键，下面给出详细过程<br />
<strong style="font-size: 12pt;">&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-block-cipher-base-prf_proof-probability-calc.PNG" width="434" height="251" alt="" /><br />
</strong>
<div>&nbsp; &nbsp; 另外两个分布统计的不同意味着计算可分辨（反之则计算不可分辨），亦即r<sup>(j)</sup>至少两个相同的概率。</div>
<strong style="font-size: 12pt;">&nbsp;&nbsp;</strong><span style="color: #f37d31;">Construction 5.3.9</span>一次只能加密与密钥等长的明文，如果要加密更长的明文，怎么办？一个简单直接<br />
&nbsp; 的方法是将明文分成多个大小为n的块，对每个块调用上述加密步骤，那么就得到形如下的密文块序列<strong style="font-size: 12pt;"><br />
</strong><strong style="font-size: 12pt;">&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-block-cipher-base-prf_ciphertext-sequence.PNG" width="356" height="79" alt="" /><br />
&nbsp;&nbsp;</strong>密文块序列从<span style="color: #c00000;">Proposition 5.3.10</span>的证明中可知是计算不可分辨的，满足<span style="font-family: 宋体;">「</span>多组消息安全性<span style="font-family: 宋体; font-size: 10.5pt;">」</span>。但对于解密<br />
&nbsp; 需要存储每一块的随机数，因此比较占空间，所以衍生出下面更高效的方案<span style="color: #f37d31;">Construction 5.3.12</span><strong style="font-size: 12pt;"><br />
</strong><strong style="font-size: 12pt;"><br />
</strong>
<div><strong style="font-size: 12pt;">私密通用加密</strong><strong style="font-size: 12pt;"><br />
</strong>&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-encryption-scheme-base-prf.PNG" width="490" height="422" alt="" /><br />
&nbsp; <strong style="font-size: 11pt;">&nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp;语义安全性分析</strong>&nbsp; &nbsp;&nbsp;</div>
<div>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-encryption-scheme-base-prf_security-analysis.PNG" alt="" /><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-encryption-scheme-base-prf_security-analysis-2.PNG" alt="" /><br />
<div><strong style="font-size: 12pt;"><br />
抗主动攻击安全性</strong></div>
<div>&nbsp; &nbsp; &nbsp; &nbsp;以上两种构造因满足<span style="font-family: 宋体; font-size: 10.5pt;">「</span>多组消息安全性<span style="font-family: 宋体; font-size: 10.5pt;">」</span>，故满足<span style="color: #ff0000;">CPA</span>与<span style="color: #ff0000;">CCA1</span>，具体的证明可参考Oded Goldreich《密码学基础》的<span style="color: #f37d31;">Proposition 5.4.12</span>、<span style="color: #f37d31;">Proposition 5.4.18</span>。<br />
&nbsp; &nbsp;但不满足<span style="color: #ff0000;">CCA2，</span>因为攻击者拿到挑战密文后，可以修改它再发出解密质疑，得到回答的明文从而异或求解<em>f<sub>k</sub></em>(<em>r<sub>i</sub></em>)，最后与挑战密文异或求解挑战明文<br />&nbsp; &nbsp;对于通用加密构造的CCA2攻击细节如下<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/privkey-encryption-scheme-base-prf-cca2-detail.PNG" width="312" height="288" alt="" /></div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230365.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-06-29 17:00 <a href="http://www.cppblog.com/qinqing1984/archive/2024/06/29/230365.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二元有限域及其扩域上的计算</title><link>http://www.cppblog.com/qinqing1984/archive/2024/05/16/230353.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Thu, 16 May 2024 05:41:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/05/16/230353.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230353.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/05/16/230353.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230353.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230353.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><strong>定义<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_define.png" width="351" height="51" alt="" /><br />
<br />
</strong></span><strong>
</strong><strong style="font-size: 12pt;">Berlekamp分解算法<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_berlekamp.png" alt="" /><br />
</strong><br />
<strong>
</strong><strong style="font-size: 12pt;">AES有限域<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_aes-element-denote.png" width="536" height="88" alt="" /><br />
<br />
</strong>
<strong style="font-size: 11pt;">&nbsp; 不可约性证明<br />
</strong>&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_aes-polynomial-irreducible-proof.png" width="498" height="824" alt="" /><br />
<br />
<strong></strong><strong style="font-size: 11pt;">&nbsp; 非本原性验证<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_aes-polynomial-noprimitive-verify.png" alt="" /><br />
<br />
&nbsp;&nbsp;</strong><strong style="font-size: 11pt;">找出本原元<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_aes-find-primitive-element.png" alt="" /><br />
<br />
</strong>
&nbsp; <strong style="font-size: 11pt;">不可约多项式个数<br />
&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_aes-irreducible-polynomial-count.png" alt="" /><br />
<br />
</strong><strong style="font-size: 12pt;">线性移位寄存器m序列<br />
&nbsp; &nbsp; &nbsp;</strong>根据参考文献1知线生移位寄存器产生m序列的充要条件是特征多项式f(x)为本原多项式。而确立有限域上的本原多项式，主要有两种方法：<br />
&nbsp; &nbsp; &nbsp; 一种方法是根据<strong>F</strong><sub>q</sub>上所有次数为n的本原多项式的乘积正好等于割圆多项式Q<sub>e</sub>，其中e=q<sup>n</sup>-1，从而所有次数为n的本原多项式可以通过分解Q<sub>e</sub>得到。<br />
&nbsp; &nbsp; &nbsp; 另一种方法是通过构造本原元再求本原元的极小多项式，先素因子分解q<sup>n</sup>-1=p<sub>1</sub>p<sub>2</sub>...p<sub>k</sub>，如果对每一p<sub>i</sub>都有ord(<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sub>i</sub>)=p<sub>i</sub>，那么<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span>=<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sub>1</sub><span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sub>2</sub>...<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sub>k</sub>的阶就是q<sup>n</sup>-1，<br />
&nbsp; &nbsp; &nbsp; 因此是<strong>F</strong><sub>q</sub>上的本原元，则f(x)=(x-<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span>)(x-<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sup>2</sup>)...(x-<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sup>r</sup>)，r=q<sup>n</sup>-1（因为<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span>是本原元，所以n是使<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sup>q^n</sup>=<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span>成立的最小正整数）。<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <strong style="font-size: 11pt;">求解本原多项式</strong><br />
&nbsp; &nbsp; &nbsp; &nbsp;假设线性移位寄存器的级数为4，这里使用上述二种方法求<strong>F</strong><sub>16</sub>上的本原多项式，过程如下<br />&nbsp; &nbsp; &nbsp; &nbsp;<strong>分解割圆多项式法</strong><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_lfsr-solve-primitive-polynomial-algo1.png" alt="" /><br />
<br /><div>&nbsp; &nbsp; &nbsp; &nbsp;<strong>构造极小多项式法</strong><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_lfsr-solve-primitive-polynomial-algo2.png" alt="" /></div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_lfsr-solve-primitive-polynomial-algo2_1.png" alt="" /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_lfsr-solve-primitive-polynomial-algo2_2.png" alt="" /><br /><strong style="font-size: 11pt;">&nbsp; &nbsp;<br />&nbsp; 本原多项式个数<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_lfsr-primitive-polynomial-count.png" width="554" height="191" alt="" /><br />
<br />
&nbsp; &nbsp;</strong><strong style="font-size: 11pt;">m序列示例<br />&nbsp; &nbsp; &nbsp; &nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-field-extend-compute_lfsr-mseq-example.png" width="522" height="358" alt="" /><br />
<br />
<br />
</strong>
<div><strong style="font-size: 12pt;">参考文献<br />
&nbsp; &nbsp;&nbsp;</strong>[1] 代数学基础与有限域&nbsp; &nbsp; 林东岱</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230353.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-05-16 13:41 <a href="http://www.cppblog.com/qinqing1984/archive/2024/05/16/230353.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单连分数攻击RSA的迭代次数分析</title><link>http://www.cppblog.com/qinqing1984/archive/2024/04/04/230326.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Thu, 04 Apr 2024 10:19:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/04/04/230326.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230326.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/04/04/230326.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230326.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230326.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">【适用前提】</strong>大整数N=pq的素因子p&lt;q&lt;2p，解密指数d&lt;(1/3)N<sup>1/4<br />
<br />
</sup>
<strong style="font-size: 12pt;">【攻击方法】</strong>&nbsp; <br />&nbsp; &nbsp; &nbsp;1）用欧几里得算法计算e/N的各个渐近分数k<sub>i</sub>/d<sub>i</sub>，i&gt;=1，直至d<sub>i&gt;=</sub>(1/3)N<sup>1/4</sup>，记录此时的i为m。令i=1
&nbsp; <br />&nbsp; &nbsp; &nbsp;2）计算T=(e*d<sub>i</sub>-1)/k<sub>i</sub>，若T不为整数则转到4），否则转到3）&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp;3）解方程f(x)=x<sup>2</sup>-(N-T+1)x+N=0的根，如果有正整数根且两个根皆小于N，则输出p、q，并返回成功。否则转到4）&nbsp;&nbsp;<br />&nbsp; &nbsp; &nbsp;4）递增i，若i&lt;m则转回2），否则返回失败<br />
&nbsp; &nbsp;该方法即<strong>Wiener算法</strong>用到了关于连分数的一个<strong>定理：</strong><span style="color: #ff6600;">若</span><span style="color: #ff6600; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><span style="color: #ff6600;">为任一实数，有理数p/q适合|</span><span style="color: #ff6600; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><span style="color: #ff6600;">-(p/q)|&lt;1/(2q</span><sup style="color: #ff6600;">2</sup><span style="color: #ff6600;">)，则p/q必为</span><span style="color: #ff6600; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><span style="color: #ff6600;">的某一渐近分数</span>。证明详见参考文献[2]。<br />
&nbsp; &nbsp;由定理可知攻击方法是可行的，必能找到使f(x)=0有合理解的某渐近分数。下面证明：攻击迭代次数的上界为<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/continuedfraction-attack-rsa-iteration-upperbound.png" width="72" height="43" alt="" /><br />
<br />
<strong style="font-size: 12pt;">【证明】<br />&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/continuedfraction-attack-rsa-iteration-proof.png" width="466" height="508" alt="" /><br />
<br />
<br />
</strong>
<strong style="font-size: 12pt;">【例子】</strong>N = 9449868410449，e = 6792605526025，d&lt;(1/3)N<sup>1/4</sup>&#8776;584，试分解N<br />&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/continuedfraction-attack-rsa-example.png" alt="" /><br />
<br />
<strong style="font-size: 12pt;">参考文献</strong>
<br />&nbsp; &nbsp; &nbsp;[1] 公钥密码学的数学基础&nbsp; 王小云、王明强、孟宪萌<br />&nbsp; &nbsp; &nbsp;[2] 算法数论&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;裴定一、祝跃飞<img src ="http://www.cppblog.com/qinqing1984/aggbug/230326.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-04-04 18:19 <a href="http://www.cppblog.com/qinqing1984/archive/2024/04/04/230326.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>有限循环群的结构及生成元的判定</title><link>http://www.cppblog.com/qinqing1984/archive/2024/03/20/230315.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Wed, 20 Mar 2024 14:49:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/03/20/230315.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230315.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/03/20/230315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230315.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230315.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"><strong>群结构</strong></span>
<strong>&nbsp;<br />
&nbsp; 定理1</strong>：若G为一个循环群，则G内每个满足ord(<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span>)=s的元素<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span>都是拥有s个元素的循环子群的生成元<br />
&nbsp;
<strong>证明</strong>：<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-cyclic-group-theorem1.PNG" alt="" />
<br />
<br />
&nbsp; <strong>定理2</strong>：若G为一个阶为n的有限循环群，g为对应的生成元，则对整除n的每个整数k，G都存在一个唯一的阶为k的循环子群H。<br />
&nbsp; &nbsp; 这个子群是由g<sup>n/k</sup>生成的。H是由G内满足条件<span style="color: #4b4b4b; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; font-size: 13px; background-color: #ffffff;">&#945;</span><sup>k</sup>=1的元素组成的，且G不存在其它子群<br />
<strong>&nbsp; 证明</strong>：<br />
&nbsp; &nbsp; &nbsp; <strong><img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-cyclic-group-theorem2.PNG" alt="" /><br />
<br />
</strong>&nbsp; <strong>推论</strong>：从上述两定理可知有限循环群、子群及生成元的关系如下<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-cyclic-group-deduction.PNG" alt="" /><br />
&nbsp; <strong>例子</strong>：依据上述推论得如下<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/finite-cyclic-group-example.PNG" alt="" /><br />
<br />
<span style="font-size: 12pt;"><strong>生成元判定算法<br />
</strong></span>
&nbsp; 输入：循环群G、某子群的阶k
&nbsp; <br />
&nbsp; &nbsp; 1）若k=1，则直接输出e。否则转到2）<br />
&nbsp; &nbsp; 2）随机从G-{e}中选择一元素x<br />
&nbsp; &nbsp; 3）若x<sup>k</sup>&#8800;e，则转回2）。否则若k为素数，则跳到5）；若k为合数，则转到4）
&nbsp; <br />
&nbsp; &nbsp; 4）遍历整除k的真因子d，若x<sup>d</sup>=e，则转回2）
&nbsp; &nbsp;<br />
&nbsp; &nbsp; 5）输出x<img src ="http://www.cppblog.com/qinqing1984/aggbug/230315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-03-20 22:49 <a href="http://www.cppblog.com/qinqing1984/archive/2024/03/20/230315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>混合线性同余发生器的引理验证</title><link>http://www.cppblog.com/qinqing1984/archive/2024/03/12/230308.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Tue, 12 Mar 2024 09:30:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/03/12/230308.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230308.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/03/12/230308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230308.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230308.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">混合线性同余发生器（MLCG）
&nbsp;</strong> &nbsp; &nbsp;<br />
&nbsp; &nbsp; &nbsp; X<sub>n</sub> &#8801; &#945;X<sub>n-1</sub> + c mod m&nbsp; &nbsp; 0&lt;X<sub style="font-size: 7pt;">0</sub>, &#945;, c&lt;m，X<sub style="font-size: 7pt;">0</sub>为种子，n=1、2、3...<br />
<br />
<strong style="font-size: 12pt;">定理</strong> 如果下列3个条件都满足，则 MLCG达到满周期(即周期d=m)
<br />
&nbsp; &nbsp; &nbsp;(1) (c, m)=1，即 c、m互素<br />
&nbsp; &nbsp; &nbsp;(2) 对 m的任一素因子p，有&#945;&#8801;1 mod p<br />
&nbsp; &nbsp; &nbsp;(3) 如果4|m，则 &#945;&#8801;1 mod 4
<br />
&nbsp; 该定理的证明在<span><em>参考文献[2]</em></span>中证明并用到如下两个引理：<br />
<strong>&nbsp; 引理5</strong> <span style="color: #ff6600;">设p为素数，&#945;&#8712;Z</span><sup style="color: #ff6600;">+</sup><span style="color: #ff6600;">且p</span><sup style="color: #ff6600;">&#945;</sup><span style="font-family: Verdana; color: #ff6600;">&gt;2，如果 x=1(mod p</span><sup style="color: #ff6600;">&#945;</sup><span style="font-family: Verdana; color: #ff6600;">)，x&#8800;1(mod p</span><sup style="color: #ff6600;">&#945;</sup><span style="font-family: Verdana; color: #ff6600;"><sup>+1</sup>)；则x<sup>p</sup>=1(mod p</span><sup style="color: #ff6600;">&#945;</sup><span style="font-family: Verdana; color: #ff6600;"><sup>+1</sup>)， x<sup>p</sup>&#8800;1(mod p</span><sup style="color: #ff6600;">&#945;</sup><span style="font-family: Verdana; color: #ff6600;"><sup>+2</sup>)</span><br />
&nbsp; &nbsp; 该引理给出了求一个整数的阶的判别方法，是理解MLCG周期等于m的充要条件之关键。<br />
&nbsp; &nbsp; 本文阐述为什么p是使x<sup>p</sup>=1(mod p<sup>&#945;+1</sup>)成立的最小正整数，以及一般情形m=p<sup>w</sup>(w&#8805;1)是使x<sup>m</sup>=1(mod p<sup>&#945;+w</sup>)成立的最小正整数；为什么前提条件是p<sup>&#945;</sup>&gt;2。<br />
<br />
&nbsp; &nbsp; &#9670; 先论证不存在一个整数1&#8804;b&lt;p使得x<sup>b</sup>=1(mod p<sup>&#945;+1</sup>)成立<br />
&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/mlcg-one-lemma-proof-spec-case.png" alt="" /><br />
&nbsp; &nbsp; &#9670; 再证不存在一个整数1&#8804;b&lt;m使得x<sup>b</sup>=1 (mod p<sup>&#945;+w</sup>)成立<br />
&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/mlcg-one-lemma-proof-general.png" alt="" /><br />
<div><strong style="font-size: 12pt;">&nbsp; &nbsp;&nbsp;<br />
</strong>&nbsp; &nbsp; &nbsp;&#9670; 为什么前提条件是p<sup>&#945;</sup>&gt;2<br />
<strong style="font-size: 12pt;">&nbsp; &nbsp; &nbsp; &nbsp;</strong>如果p<sup>&#945;</sup>=2，x=1(mod 2)且x&#8800;1(mod 2<sup>2</sup>)。令x=1+2q，2 &#8740; q。有x<sup>2</sup>=(1+2q)<sup>2</sup>=1+4q+4q<sup>2</sup>，注意到q是奇数，则x<sup>2</sup>=1(mod2<sup>2</sup>)，x<sup>2</sup>=1(mod2<sup>3</sup>)。故得不到引理的结论<br />
<br />
&nbsp; <strong>引理6</strong><span style="color: #ff6600;">（改写的等价形式） 如果&nbsp;</span><span style="font-size: 11.6667px; color: #ff6600;">&#945;</span><span style="color: #ff6600;">=1(mod 4)，则(</span><span style="font-size: 11.6667px; color: #ff6600;">&#945;</span><sup style="color: #ff6600;">m</sup><span style="color: #ff6600;"> - 1)/(</span><span style="font-size: 11.6667px; color: #ff6600;">&#945;</span><span style="color: #ff6600;">&nbsp;- 1)=0(mod m) ，m=2</span><sup style="color: #ff6600;">w</sup><span style="color: #ff6600;">，w&gt;1</span></div>&nbsp; &nbsp; &nbsp;其实这里当<span style="font-size: 11.6667px;">&#945;</span>=1(mod 2)且<span style="font-size: 11.6667px;">&#945;</span>&#8800;1(mod 4)，结论也是成立的。比如取<span style="font-size: 11.6667px;">&#945;</span>=3，m=16，则 (3<sup>16</sup> -1)=81<sup>4</sup> -1=(-15)<sup>4</sup> -1=-15&#215;-7&#215;-7 -1=-15&#215;-15 -1=9&#215;-7 -1=0(mod 32)，<br />&nbsp; &nbsp; &nbsp;即(3<sup>16</sup> -1)/(3-1)=0(mod 16)。但只有当<span style="font-size: 11.6667px;">&#945;</span>=1(mod 4)时，m才是使结论成立的最小正整数。论证如下
<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/mlcg-one-lemma-proof-prime-eq-2-case.png" width="406" height="215" alt="" /><br /><br />
<strong style="font-size: 12pt;">
参考文献</strong>
&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp;[1] 现代密码学第4版 杨波
&nbsp; &nbsp; <br />&nbsp; &nbsp; &nbsp;[2] 混合线性同余发生器的周期分析 张广强、张小彩<img src ="http://www.cppblog.com/qinqing1984/aggbug/230308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-03-12 17:30 <a href="http://www.cppblog.com/qinqing1984/archive/2024/03/12/230308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Blum数的基本定理及应用</title><link>http://www.cppblog.com/qinqing1984/archive/2024/02/25/230288.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sun, 25 Feb 2024 15:29:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/02/25/230288.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230288.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/02/25/230288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230288.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230288.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">【定义】</strong>设整数N=P&#215;Q，P与Q皆为素数，如果P&#8801;Q&#8801;3 (mod4)，则N为一个Blum（布卢姆）数<br />
<br />
<strong>
</strong><strong style="font-size: 12pt;">【定理】</strong>设N为Blum数，N &#8740; d，若同余方程x<sup>2</sup>&#8801;d (mod N)有解，则d的平方根中有一半的Jacobi符号为1，另一半Jacobi符号为-1；且仅有一个平方根为模N的二次剩余<br />
&nbsp; &nbsp; <strong>证明：</strong><br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-blum-integer-property.png" alt="" /><br />
<br />
<strong style="font-size: 12pt;">【推论】</strong>设N为Blum数，N=P&#215;Q，令<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/blum-integer-property-deduction.png" alt="" /><br />
&nbsp; &nbsp;<strong>证明：</strong><br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-blum-integer-algebraic-structure.png" alt="" /><br />
<br />
<span style="font-size: 12pt;">【<strong>例子</strong>】</span>由定义知N=21=3&#215;7为Blum数，则相关乘法群、二次剩余子群、Jacobi集合如下<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/blum-integer-example.png" alt="" />
<strong style="font-size: 12pt;"><br />
<br />
<br />
【应用一】</strong><span style="font-size: 12pt;">Blum-Goldwasser公钥加密</span><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/blum-goldwasser-public-key-encrypt.PNG" width="488" height="418" alt="" /><br />
&nbsp; &nbsp; 解密正确性是因为步骤1用到了<span style="color: #993366;"><strong>欧拉定理</strong></span>及求平方根的如下算法，步骤2用到了<strong style="color: #ff6600;">中国剩余定理<br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/extract-square-root-fast-algorithm.PNG" width="486" height="328" alt="" /><br />
</strong>&nbsp; &nbsp; &nbsp; &nbsp;从上可得x=s<sup>(P+1)/4</sup> mod P或x=P-s<sup>(P+1)/4</sup> mod P，因(-1)<sup>(P-1)/2</sup>等于-1 mod P，故前者为模P的二次剩余。从加密流程可知{s<sub>1</sub>,s<sub>2</sub>,...,s<sub>n+1</sub>}正是模N二次剩余类的子集。<br />
&nbsp; &nbsp; 所以从密文中r=s<sub>n+1</sub>求它的(p+1)/4次幂、(q+1)/4次幂，迭代n次就得到了s<sub>1</sub>模p的解、s<sub>1</sub>模q的解，又因p、q、n在迭代中不变，故用欧拉定理预计算d<sub>p</sub> mod (p-1)、d<sub>q</sub> mod (q-1)。<br />
&nbsp; &nbsp; 另一种（不太高效而直接的）解密如下<br />
&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/blum-goldwasser-public-key-decrypt.PNG" width="485" height="130" alt="" /><br />
&nbsp; &nbsp; 另加密与明文异或的那部分实际是伪随机比特发生器，因为平方模N构成二次剩余类上的单向陷门置换，其最低有效位是核心断言，故从s<sub>i+1</sub>求出lsb(s<sub>i</sub>)是不可行的。简单证明如下<br />
&nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-trapdoor-oneway-permutation-hardqcore-predicate.png" alt="" /><br />
&nbsp; &nbsp; &nbsp; 由于均匀选择一个种子s<sub>0</sub>，所以为概率加密，进而由可证明安全定理（每个概率公钥加密都是多项式安全的，及每个多项式安全的公钥加密都是语义安全的）知满足<span style="color: #ff00ff;">IND-CPA</span>安全性<br />
&nbsp; &nbsp; 易知<span style="color: #ff00ff;">IND-CCA2</span>安全性是不满足的，因为敌手可用如下攻击方法获取明文：已知目标密文<span style="background-color: #ffffff;">C=(r, m&#8853;&#963;</span><sub style="background-color: #ffffff;">1</sub><span style="background-color: #ffffff;">&#963;</span><sub style="background-color: #ffffff;">2</sub><span style="font-family: 微软雅黑; background-color: #ffffff;">&#8943;</span><span style="background-color: #ffffff;">&#963;</span><sub style="background-color: #ffffff;">n</sub><span style="background-color: #ffffff;">)，构造新密文C&#8217;=(r, m&#8217;&#8853;m&#8853;&#963;</span><sub style="background-color: #ffffff;">1</sub><span style="background-color: #ffffff;">&#963;</span><sub style="background-color: #ffffff;">2</sub><span style="font-family: 微软雅黑; background-color: #ffffff;">&#8943;</span><span style="background-color: #ffffff;">&#963;</span><sub style="background-color: #ffffff;">n</sub><span style="background-color: #ffffff;">)，将C&#8217;发给解密预言机得到m&#8217;&#8217;，则m=m&#8217;&#8217;&#8853;m&#8217;</span>。 <br />
&nbsp; &nbsp; 由于加密产生的r与&#963;<sub>1</sub>&#963;<sub>2</sub><span style="font-family: 微软雅黑; font-size: 10.5pt;">&#8943;</span>&#963;<sub>n</sub>都是伪随机的，所以密文(r, x&#8853;&#963;<sub>1</sub>&#963;<sub>2</sub><span style="font-family: 微软雅黑;">&#8943;</span>&#963;<sub>n</sub>)的分布是伪随机的，在目标密文前的解密询问会得到若干密文与明文对，无论怎么构造一对明文，任选其一加密得到的密文都不可区分。因此<span style="color: #ff00ff;">IND-CCA1</span>安全性是满足的<br />
<br />
<strong style="font-size: 12pt;">【应用二】</strong><span style="font-size: 12pt;">无爪函数/置换构造</span><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/claw-free-function-permute.PNG" width="491" height="333" alt="" /><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/claw-free-function-permute2.PNG" width="490" height="460" alt="" /><br />
&nbsp; &nbsp; 如上构造用到Blum数的上述推论，及基于大整数因子分解的困难假设。这里主要解释下为什么由两个Jacobi符号不同的平方根可计算大整数的素因子<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-blum-square-root-calculate-factor.png" alt="" /><br />
<br />
<strong style="font-size: 12pt;">【应用三】</strong><span style="font-size: 12pt;">伪随机数发生器</span>
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <strong>X<sub>n+1</sub>=X<sub>n</sub><sup>2</sup> mod N</strong>&nbsp; &nbsp; &nbsp; n=0、1、2...，X<sub>0</sub>为种子
<br />
&nbsp; &nbsp; &nbsp;显然种子不为1。若为一个非二次剩余，则从X<sub>1</sub>开始就为二次剩余子群的元素，但最后必回到X<sub>1</sub>而非X<sub>0；</sub>若为二次剩余，则为了安全需要考究随机数数列的周期是否整周期（二次剩余子群的大小减1）。<br />
&nbsp; 下面具体分析周期。先举例几个很小的Blum数<br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/blum-pseudorandom-generator-example.png" alt="" /><br />
&nbsp; &nbsp; &nbsp;从上面例子可以发现，由二次剩余子群构成的随机数数列不一定是整周期的，对于N=33无论种子怎么选，都是整周期4；对于N=57若种子选-8或7则周期为2，选其它则为6。<br />
&nbsp; 现在一般化考虑，什么情况下才产生整周期？论证如下<br />
&nbsp; &nbsp; &nbsp; <img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/blum-pseudorandom-generator-period-analyse.png" alt="" />&nbsp;<img src ="http://www.cppblog.com/qinqing1984/aggbug/230288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-02-25 23:29 <a href="http://www.cppblog.com/qinqing1984/archive/2024/02/25/230288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于（零知识）计算复杂性的总结</title><link>http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Fri, 09 Feb 2024 14:19:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230277.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230277.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230277.html</trackback:ping><description><![CDATA[<strong style="font-size: 12pt;">经典的复杂性关系</strong>&nbsp;<br />
&nbsp;P是多项式时间确定型图灵机可识别的语言类，NP是多项式时间<span style="color: #ff0000;">非确定型</span>图灵机可识别的语言类，NPC表示NP完全问题类，coNP表示NP的补，coNPC表示NPC的补。确定型图灵机是一种从不选择移动的特殊的非确定型图灵机，故自然有P属于NP<br />
<br />
&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/classical-complexity-classes.png" alt="" /><br />
&nbsp;<br />
&nbsp;<strong>coNP、coNPC的定义之集合表述</strong><br />
&nbsp; &nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/conp-conpc-define-with-set.png" width="176" height="46" alt="" /><br />
&nbsp;上面顶部的图有个假设前提是：<span style="color: #ff00ff;">coNPC不属于NP</span>，即我们相信NP完全问题的补都不属于NP。但<span style="color: #ff0000;">当P=NP或NP=coNP</span>时，可以发现coNPC属于NP<br />
<strong><span style="font-size: 10pt;"><br />
&nbsp;&#9670;&nbsp;</span>为什么coNPC属于coNP？<br />
</strong>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-conpc-belongto-conp.png" width="269" height="115" alt="" /><br />
<span style="font-weight: bold; font-size: 10pt;"><br />
&nbsp;&#9670;&nbsp;</span><strong>为什么NPC 不属于coNP？</strong><br />
<strong>&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-npc-nobelongto-conp.png" width="335" height="122" alt="" /></strong><br />
<span style="font-size: 13.3333px; font-weight: 700;"><br />
&nbsp;&#9670;&nbsp;</span><strong>为什么P属于coNP?</strong><br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-p-belongto-conp.png" width="272" height="115" alt="" /><br />
<br />
<span style="font-size: 13.3333px; font-weight: 700;">&nbsp;&#9670;&nbsp;</span><strong>当P=NP时，为什么NP=coNP？<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-np-eq-conp-while-p-eq-np.png" alt="" /><br />
</strong><span style="font-size: 13.3333px; font-weight: 700;">&nbsp;&#9670;&nbsp;</span><strong>当NP=coNP时，为什么NPC=coNPC？<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-npc-eq-conpc-while-np-eq-conp.png" width="708" height="309" alt="" /><br />
<br />
</strong>
<div>&nbsp;前文的关系演变图没考虑多项式空间问题类PS与递归问题类（因为那两个条件不会影响到它们），<strong>PS（NPS）</strong>是带多项式空间限制的确定型（非确定型）图灵机可接受的语言类，但不限制运行时间可能需超多项式或指数时间，在外围加上PS与递归语言类后如下<br />
<br />
&nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/classical-complexity-classes2.png" alt="" /><br />
<span style="font-size: 13.3333px; font-weight: 700;"><br />
&nbsp;&#9670;&nbsp;</span><strong>为什么coNP 属于PS？<br />
&nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/proof-conp-belongto-ps.png" width="269" height="160" alt="" /><br />
<br />
</strong><strong style="font-size: 11pt;">&nbsp; 用于分析加密</strong><strong style="font-size: 12pt;"><br />
</strong><strong>
</strong>&nbsp; &nbsp; 无论对称还是公钥加密，统一设加密运算为E，解密为D。对于正常用户，E和D皆为DTM（确定性图灵机）；对于敌手，若攻击对称加密，则E和D为NTM（非确定性图灵机），攻击公钥则解密为NTM。由于E和D输入为密钥和明文或密文，因此DTM和NTM可采用多道/多带结构。DTM代表P类计算，NTM代表NP类计算，故对于公钥加密安全保障要求<span style="color: red;">P!=NP</span>，这是一个<span style="color: red;">必要条件</span>。另根据计算理论定理，必有L(NTM)=L(DTM)，但是它对应的DTM可能要多花费指数时间，这亦说明破解公钥的解密是困难的
<br />
<br />
<br />
<strong style="font-size: 12pt;">
零知识复杂性关系</strong><br />
<div>&nbsp; 依据Oded Goldreich的《密码学基础》，关系如下<br />
<br />
&nbsp; &nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-complexity-classes-set.png" width="577" height="330" alt="" /><br />
<div>&nbsp; <br />
&nbsp; 相关原文片段引用如下</div>
</div>
<strong style="font-size: 12pt;">
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-complexity-classes.PNG" width="540" height="412" alt="" /><br />
</strong>&nbsp;&nbsp;<strong>BPP</strong>是可被概率多项式时间图灵机(即随机化算法)识别的语言类，IP是所有具有交互证明系统的语言构成的类，等于多项式空间语言类即前文经典复杂性关系中的PS，如下图所述<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-ip-eq-pspace.PNG" width="540" height="161" alt="" /><br />
&nbsp; &nbsp;<strong>SZK!=CZK</strong>是因为计算不可分辨不一定能推出统计不可分辨，<strong>BPP!=PZK</strong>之原因可理解为BPP是退化的特殊的完备交互证明系统（证明者什么都不做，仅由验证者概率性地决定是否接受或拒绝）。<br />
&nbsp;当（非均匀）单向函数存在时<strong>CZK=IP</strong>，涉及的命题与定理如下<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/one-way-fun-exist-prg-exist.PNG" width="536" height="196" alt="" /><br />
<hr />
&nbsp;&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/prg-bit-commitment-scheme.PNG" width="503" height="443" alt="" /><br />
<hr />
<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/zk-proof-system-for-ip.PNG" width="540" height="411" alt="" /><br />
<div><br />
&nbsp;也就是说PS类中的每种语言都具有零知识证明系统，比如NP有如下构造<br />
&nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/np-zk-proof-system.PNG" width="536" height="243" alt="" /></div>
</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2024-02-09 22:19 <a href="http://www.cppblog.com/qinqing1984/archive/2024/02/09/230277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个积分攻击定理的证明</title><link>http://www.cppblog.com/qinqing1984/archive/2023/12/16/230233.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 16 Dec 2023 13:49:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/12/16/230233.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230233.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/12/16/230233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230233.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230233.html</trackback:ping><description><![CDATA[<p><strong><span style="font-family: 宋体; font-size: 12pt;">【定理】</span></strong><span style="mso-spacerun:'yes';font-family:宋体;mso-bidi-font-family:'Times New Roman';font-size:10.5000pt;">设多项式<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cryptanalysis_jifengongji_1_ex.png" width="159" height="47" alt="" /></span><span style="font-size: 10.5pt; font-family: 宋体;">，其中q是某个素数的方幂，F<sub>q</sub></span><span style="font-size: 10.5pt; font-family: 宋体;">为有限域，</span><span style="font-size: 10.5pt; font-family: 宋体;">则&nbsp; &nbsp;&nbsp;</span></p>
<p><span style="mso-spacerun:'yes';font-family:宋体;mso-ascii-font-family:'Cambria Math'; mso-hansi-font-family:'Cambria Math';mso-bidi-font-family:'Cambria Math';font-size:10.5000pt;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cryptanalysis_jifengongji_2.png" width="116" height="35" alt="" /></span></p>
<p style="text-indent: 42pt;"><span style="mso-spacerun:'yes';font-family:宋体; mso-hansi-font-family:'Cambria Math';mso-bidi-font-family:'Cambria Math';font-size:10.5000pt;">若<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cryptanalysis_jifengongji_5.png" width="36" height="22" alt="" /></span><span style="mso-spacerun:'yes';font-family:宋体; mso-hansi-font-family:'Cambria Math';mso-bidi-font-family:'Cambria Math';font-size:10.5000pt;">是置换多项式，则<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cryptanalysis_jifengongji_3.png" width="55" height="26" alt="" /></span></p>
<p><strong><span style="font-family: 宋体; font-size: 12pt;"><br />【证明】</span></strong><img width="3" height="20" src="file:///C:/Users/Administrator/AppData/Local/Temp/ksohtml30200/wps11.jpg" alt="" /><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/cryptanalysis_jifengongji_4_ex4.png" alt="" /><br /></p><img src ="http://www.cppblog.com/qinqing1984/aggbug/230233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-12-16 21:49 <a href="http://www.cppblog.com/qinqing1984/archive/2023/12/16/230233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈对称加密算法的软件实现</title><link>http://www.cppblog.com/qinqing1984/archive/2023/11/09/230172.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Thu, 09 Nov 2023 08:39:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/11/09/230172.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230172.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/11/09/230172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230172.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230172.html</trackback:ping><description><![CDATA[谈两个问题：<span style="color: #ff0000;">高性能与安全性</span><br />
<br />
<strong>先谈高性能</strong>：这里指代码实现层面（非数学优化层面），使用寄存器优化，即主密钥/轮密钥、敏感数据比如中间/临时变量必须存于寄存器，明文/密文放在内存（若有够用的寄存器则放寄存器），主密钥用特权寄存器（为支持长期存储，比如调试寄存器、MSR寄存器），轮密钥和敏感数据用通用寄存器。那么怎么做？稳妥快捷的方法是用汇编或内联汇编，手工编排寄存器即构建密钥与敏感数据到寄存器集合的映射，若用普通的汇编指令，则寄存器的映射比较自由；若用专用的加密指令，则映射相对受限。如果用高级语言比如c/c++开发，问题在于<span style="color: &amp;366ff;"><strong>register</strong></span>关键字非强制生效，即使强制的，编译器优化（比如公共子表达式消除）产生的中间变量及寄存器分配策略不完全可控，需要修改编译器比如<strong>LLVM</strong>强制某些变量必须分配(特定的)寄存器，为通用性要从编程语言语法属性到目标机器代码生成都改动支持，这个方法实现成本有点大。下面是摘自LLVM X86RegisterInfo.td的部分寄存器<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #08080; ">&nbsp; 1</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;32-bit&nbsp;registers</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #08000; "></span>let&nbsp;SubRegIndices&nbsp;=&nbsp;[sub_16bit,&nbsp;sub_16bit_hi],&nbsp;CoveredBySubRegs&nbsp;=&nbsp;1&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;&nbsp;3</span>&nbsp;def&nbsp;EAX&nbsp;:&nbsp;X86Reg&lt;"eax",&nbsp;0,&nbsp;[AX,&nbsp;HAX]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;0,&nbsp;0]&gt;;<br />
<span style="color: #08080; ">&nbsp;&nbsp;4</span>&nbsp;def&nbsp;EDX&nbsp;:&nbsp;X86Reg&lt;"edx",&nbsp;2,&nbsp;[DX,&nbsp;HDX]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;2,&nbsp;2]&gt;;<br />
<span style="color: #08080; ">&nbsp;&nbsp;5</span>&nbsp;def&nbsp;ECX&nbsp;:&nbsp;X86Reg&lt;"ecx",&nbsp;1,&nbsp;[CX,&nbsp;HCX]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;1,&nbsp;1]&gt;;<br />
<span style="color: #08080; ">&nbsp;&nbsp;6</span>&nbsp;def&nbsp;EBX&nbsp;:&nbsp;X86Reg&lt;"ebx",&nbsp;3,&nbsp;[BX,&nbsp;HBX]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;3,&nbsp;3]&gt;;<br />
<span style="color: #08080; ">&nbsp;&nbsp;7</span>&nbsp;def&nbsp;ESI&nbsp;:&nbsp;X86Reg&lt;"esi",&nbsp;6,&nbsp;[SI,&nbsp;HSI]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;6,&nbsp;6]&gt;;<br />
<span style="color: #08080; ">&nbsp;&nbsp;8</span>&nbsp;def&nbsp;EDI&nbsp;:&nbsp;X86Reg&lt;"edi",&nbsp;7,&nbsp;[DI,&nbsp;HDI]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;7,&nbsp;7]&gt;;<br />
<span style="color: #08080; ">&nbsp;&nbsp;9</span>&nbsp;def&nbsp;EBP&nbsp;:&nbsp;X86Reg&lt;"ebp",&nbsp;5,&nbsp;[BP,&nbsp;HBP]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;4,&nbsp;5]&gt;;<br />
<span style="color: #08080; ">&nbsp;10</span>&nbsp;def&nbsp;ESP&nbsp;:&nbsp;X86Reg&lt;"esp",&nbsp;4,&nbsp;[SP,&nbsp;HSP]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;5,&nbsp;4]&gt;;<br />
<span style="color: #08080; ">&nbsp;11</span>&nbsp;def&nbsp;EIP&nbsp;:&nbsp;X86Reg&lt;"eip",&nbsp;0,&nbsp;[IP,&nbsp;HIP]&gt;,&nbsp;DwarfRegNum&lt;[-2,&nbsp;8,&nbsp;8]&gt;;<br />
<span style="color: #08080; ">&nbsp;12</span>&nbsp;}<br />
<span style="color: #08080; ">&nbsp;13</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;14</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;X86-64&nbsp;only,&nbsp;requires&nbsp;REX</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;15</span>&nbsp;<span style="color: #08000; "></span>let&nbsp;SubRegIndices&nbsp;=&nbsp;[sub_16bit,&nbsp;sub_16bit_hi],&nbsp;CoveredBySubRegs&nbsp;=&nbsp;1&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;16</span>&nbsp;def&nbsp;R8D&nbsp;&nbsp;:&nbsp;X86Reg&lt;"r8d",&nbsp;&nbsp;&nbsp;8,&nbsp;[R8W,R8WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;17</span>&nbsp;def&nbsp;R9D&nbsp;&nbsp;:&nbsp;X86Reg&lt;"r9d",&nbsp;&nbsp;&nbsp;9,&nbsp;[R9W,R9WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;18</span>&nbsp;def&nbsp;R10D&nbsp;:&nbsp;X86Reg&lt;"r10d",&nbsp;10,&nbsp;[R10W,R10WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;19</span>&nbsp;def&nbsp;R11D&nbsp;:&nbsp;X86Reg&lt;"r11d",&nbsp;11,&nbsp;[R11W,R11WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;20</span>&nbsp;def&nbsp;R12D&nbsp;:&nbsp;X86Reg&lt;"r12d",&nbsp;12,&nbsp;[R12W,R12WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;21</span>&nbsp;def&nbsp;R13D&nbsp;:&nbsp;X86Reg&lt;"r13d",&nbsp;13,&nbsp;[R13W,R13WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;22</span>&nbsp;def&nbsp;R14D&nbsp;:&nbsp;X86Reg&lt;"r14d",&nbsp;14,&nbsp;[R14W,R14WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;23</span>&nbsp;def&nbsp;R15D&nbsp;:&nbsp;X86Reg&lt;"r15d",&nbsp;15,&nbsp;[R15W,R15WH]&gt;;<br />
<span style="color: #08080; ">&nbsp;24</span>&nbsp;}<br />
<span style="color: #08080; ">&nbsp;25</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;26</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;64-bit&nbsp;registers,&nbsp;X86-64&nbsp;only</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;27</span>&nbsp;<span style="color: #08000; "></span>let&nbsp;SubRegIndices&nbsp;=&nbsp;[sub_32bit]&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;28</span>&nbsp;def&nbsp;RAX&nbsp;:&nbsp;X86Reg&lt;"rax",&nbsp;0,&nbsp;[EAX]&gt;,&nbsp;DwarfRegNum&lt;[0,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;29</span>&nbsp;def&nbsp;RDX&nbsp;:&nbsp;X86Reg&lt;"rdx",&nbsp;2,&nbsp;[EDX]&gt;,&nbsp;DwarfRegNum&lt;[1,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;30</span>&nbsp;def&nbsp;RCX&nbsp;:&nbsp;X86Reg&lt;"rcx",&nbsp;1,&nbsp;[ECX]&gt;,&nbsp;DwarfRegNum&lt;[2,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;31</span>&nbsp;def&nbsp;RBX&nbsp;:&nbsp;X86Reg&lt;"rbx",&nbsp;3,&nbsp;[EBX]&gt;,&nbsp;DwarfRegNum&lt;[3,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;32</span>&nbsp;def&nbsp;RSI&nbsp;:&nbsp;X86Reg&lt;"rsi",&nbsp;6,&nbsp;[ESI]&gt;,&nbsp;DwarfRegNum&lt;[4,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;33</span>&nbsp;def&nbsp;RDI&nbsp;:&nbsp;X86Reg&lt;"rdi",&nbsp;7,&nbsp;[EDI]&gt;,&nbsp;DwarfRegNum&lt;[5,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;34</span>&nbsp;def&nbsp;RBP&nbsp;:&nbsp;X86Reg&lt;"rbp",&nbsp;5,&nbsp;[EBP]&gt;,&nbsp;DwarfRegNum&lt;[6,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;35</span>&nbsp;def&nbsp;RSP&nbsp;:&nbsp;X86Reg&lt;"rsp",&nbsp;4,&nbsp;[ESP]&gt;,&nbsp;DwarfRegNum&lt;[7,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;36</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;37</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;These&nbsp;also&nbsp;require&nbsp;REX.</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;38</span>&nbsp;<span style="color: #08000; "></span>def&nbsp;R8&nbsp;&nbsp;:&nbsp;X86Reg&lt;"r8",&nbsp;&nbsp;&nbsp;8,&nbsp;[R8D]&gt;,&nbsp;&nbsp;DwarfRegNum&lt;[&nbsp;8,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;39</span>&nbsp;def&nbsp;R9&nbsp;&nbsp;:&nbsp;X86Reg&lt;"r9",&nbsp;&nbsp;&nbsp;9,&nbsp;[R9D]&gt;,&nbsp;&nbsp;DwarfRegNum&lt;[&nbsp;9,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;40</span>&nbsp;def&nbsp;R10&nbsp;:&nbsp;X86Reg&lt;"r10",&nbsp;10,&nbsp;[R10D]&gt;,&nbsp;DwarfRegNum&lt;[10,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;41</span>&nbsp;def&nbsp;R11&nbsp;:&nbsp;X86Reg&lt;"r11",&nbsp;11,&nbsp;[R11D]&gt;,&nbsp;DwarfRegNum&lt;[11,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;42</span>&nbsp;def&nbsp;R12&nbsp;:&nbsp;X86Reg&lt;"r12",&nbsp;12,&nbsp;[R12D]&gt;,&nbsp;DwarfRegNum&lt;[12,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;43</span>&nbsp;def&nbsp;R13&nbsp;:&nbsp;X86Reg&lt;"r13",&nbsp;13,&nbsp;[R13D]&gt;,&nbsp;DwarfRegNum&lt;[13,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;44</span>&nbsp;def&nbsp;R14&nbsp;:&nbsp;X86Reg&lt;"r14",&nbsp;14,&nbsp;[R14D]&gt;,&nbsp;DwarfRegNum&lt;[14,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;45</span>&nbsp;def&nbsp;R15&nbsp;:&nbsp;X86Reg&lt;"r15",&nbsp;15,&nbsp;[R15D]&gt;,&nbsp;DwarfRegNum&lt;[15,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;46</span>&nbsp;def&nbsp;RIP&nbsp;:&nbsp;X86Reg&lt;"rip",&nbsp;&nbsp;0,&nbsp;[EIP]&gt;,&nbsp;&nbsp;DwarfRegNum&lt;[16,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;47</span>&nbsp;}<br />
<span style="color: #08080; ">&nbsp;48</span>&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
<span style="color: #08080; ">&nbsp;49</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;XMM&nbsp;Registers,&nbsp;used&nbsp;by&nbsp;the&nbsp;various&nbsp;SSE&nbsp;instruction&nbsp;set&nbsp;extensions.</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;50</span>&nbsp;<span style="color: #08000; "></span>def&nbsp;XMM0:&nbsp;X86Reg&lt;"xmm0",&nbsp;0&gt;,&nbsp;DwarfRegNum&lt;[17,&nbsp;21,&nbsp;21]&gt;;<br />
<span style="color: #08080; ">&nbsp;51</span>&nbsp;def&nbsp;XMM1:&nbsp;X86Reg&lt;"xmm1",&nbsp;1&gt;,&nbsp;DwarfRegNum&lt;[18,&nbsp;22,&nbsp;22]&gt;;<br />
<span style="color: #08080; ">&nbsp;52</span>&nbsp;def&nbsp;XMM2:&nbsp;X86Reg&lt;"xmm2",&nbsp;2&gt;,&nbsp;DwarfRegNum&lt;[19,&nbsp;23,&nbsp;23]&gt;;<br />
<span style="color: #08080; ">&nbsp;53</span>&nbsp;def&nbsp;XMM3:&nbsp;X86Reg&lt;"xmm3",&nbsp;3&gt;,&nbsp;DwarfRegNum&lt;[20,&nbsp;24,&nbsp;24]&gt;;<br />
<span style="color: #08080; ">&nbsp;54</span>&nbsp;def&nbsp;XMM4:&nbsp;X86Reg&lt;"xmm4",&nbsp;4&gt;,&nbsp;DwarfRegNum&lt;[21,&nbsp;25,&nbsp;25]&gt;;<br />
<span style="color: #08080; ">&nbsp;55</span>&nbsp;def&nbsp;XMM5:&nbsp;X86Reg&lt;"xmm5",&nbsp;5&gt;,&nbsp;DwarfRegNum&lt;[22,&nbsp;26,&nbsp;26]&gt;;<br />
<span style="color: #08080; ">&nbsp;56</span>&nbsp;def&nbsp;XMM6:&nbsp;X86Reg&lt;"xmm6",&nbsp;6&gt;,&nbsp;DwarfRegNum&lt;[23,&nbsp;27,&nbsp;27]&gt;;<br />
<span style="color: #08080; ">&nbsp;57</span>&nbsp;def&nbsp;XMM7:&nbsp;X86Reg&lt;"xmm7",&nbsp;7&gt;,&nbsp;DwarfRegNum&lt;[24,&nbsp;28,&nbsp;28]&gt;;<br />
<span style="color: #08080; ">&nbsp;58</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;59</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;X86-64&nbsp;only</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;60</span>&nbsp;<span style="color: #08000; "></span>def&nbsp;XMM8:&nbsp;&nbsp;X86Reg&lt;"xmm8",&nbsp;&nbsp;&nbsp;8&gt;,&nbsp;DwarfRegNum&lt;[25,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;61</span>&nbsp;def&nbsp;XMM9:&nbsp;&nbsp;X86Reg&lt;"xmm9",&nbsp;&nbsp;&nbsp;9&gt;,&nbsp;DwarfRegNum&lt;[26,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;62</span>&nbsp;def&nbsp;XMM10:&nbsp;X86Reg&lt;"xmm10",&nbsp;10&gt;,&nbsp;DwarfRegNum&lt;[27,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;63</span>&nbsp;def&nbsp;XMM11:&nbsp;X86Reg&lt;"xmm11",&nbsp;11&gt;,&nbsp;DwarfRegNum&lt;[28,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;64</span>&nbsp;def&nbsp;XMM12:&nbsp;X86Reg&lt;"xmm12",&nbsp;12&gt;,&nbsp;DwarfRegNum&lt;[29,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;65</span>&nbsp;def&nbsp;XMM13:&nbsp;X86Reg&lt;"xmm13",&nbsp;13&gt;,&nbsp;DwarfRegNum&lt;[30,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;66</span>&nbsp;def&nbsp;XMM14:&nbsp;X86Reg&lt;"xmm14",&nbsp;14&gt;,&nbsp;DwarfRegNum&lt;[31,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;67</span>&nbsp;def&nbsp;XMM15:&nbsp;X86Reg&lt;"xmm15",&nbsp;15&gt;,&nbsp;DwarfRegNum&lt;[32,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;68</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;69</span>&nbsp;def&nbsp;XMM16:&nbsp;&nbsp;X86Reg&lt;"xmm16",&nbsp;16&gt;,&nbsp;DwarfRegNum&lt;[67,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;70</span>&nbsp;def&nbsp;XMM17:&nbsp;&nbsp;X86Reg&lt;"xmm17",&nbsp;17&gt;,&nbsp;DwarfRegNum&lt;[68,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;71</span>&nbsp;def&nbsp;XMM18:&nbsp;&nbsp;X86Reg&lt;"xmm18",&nbsp;18&gt;,&nbsp;DwarfRegNum&lt;[69,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;72</span>&nbsp;def&nbsp;XMM19:&nbsp;&nbsp;X86Reg&lt;"xmm19",&nbsp;19&gt;,&nbsp;DwarfRegNum&lt;[70,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;73</span>&nbsp;def&nbsp;XMM20:&nbsp;&nbsp;X86Reg&lt;"xmm20",&nbsp;20&gt;,&nbsp;DwarfRegNum&lt;[71,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;74</span>&nbsp;def&nbsp;XMM21:&nbsp;&nbsp;X86Reg&lt;"xmm21",&nbsp;21&gt;,&nbsp;DwarfRegNum&lt;[72,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;75</span>&nbsp;def&nbsp;XMM22:&nbsp;&nbsp;X86Reg&lt;"xmm22",&nbsp;22&gt;,&nbsp;DwarfRegNum&lt;[73,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;76</span>&nbsp;def&nbsp;XMM23:&nbsp;&nbsp;X86Reg&lt;"xmm23",&nbsp;23&gt;,&nbsp;DwarfRegNum&lt;[74,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;77</span>&nbsp;def&nbsp;XMM24:&nbsp;&nbsp;X86Reg&lt;"xmm24",&nbsp;24&gt;,&nbsp;DwarfRegNum&lt;[75,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;78</span>&nbsp;def&nbsp;XMM25:&nbsp;&nbsp;X86Reg&lt;"xmm25",&nbsp;25&gt;,&nbsp;DwarfRegNum&lt;[76,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;79</span>&nbsp;def&nbsp;XMM26:&nbsp;&nbsp;X86Reg&lt;"xmm26",&nbsp;26&gt;,&nbsp;DwarfRegNum&lt;[77,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;80</span>&nbsp;def&nbsp;XMM27:&nbsp;&nbsp;X86Reg&lt;"xmm27",&nbsp;27&gt;,&nbsp;DwarfRegNum&lt;[78,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;81</span>&nbsp;def&nbsp;XMM28:&nbsp;&nbsp;X86Reg&lt;"xmm28",&nbsp;28&gt;,&nbsp;DwarfRegNum&lt;[79,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;82</span>&nbsp;def&nbsp;XMM29:&nbsp;&nbsp;X86Reg&lt;"xmm29",&nbsp;29&gt;,&nbsp;DwarfRegNum&lt;[80,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;83</span>&nbsp;def&nbsp;XMM30:&nbsp;&nbsp;X86Reg&lt;"xmm30",&nbsp;30&gt;,&nbsp;DwarfRegNum&lt;[81,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;84</span>&nbsp;def&nbsp;XMM31:&nbsp;&nbsp;X86Reg&lt;"xmm31",&nbsp;31&gt;,&nbsp;DwarfRegNum&lt;[82,&nbsp;-2,&nbsp;-2]&gt;;<br />
<span style="color: #08080; ">&nbsp;85</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;86</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;YMM0-15&nbsp;registers,&nbsp;used&nbsp;by&nbsp;AVX&nbsp;instructions&nbsp;and<br />
</span><span style="color: #08080; ">&nbsp;87</span>&nbsp;<span style="color: #08000; "></span><span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;YMM16-31&nbsp;registers,&nbsp;used&nbsp;by&nbsp;AVX-512&nbsp;instructions.</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;88</span>&nbsp;<span style="color: #08000; "></span>let&nbsp;SubRegIndices&nbsp;=&nbsp;[sub_xmm]&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;89</span>&nbsp;&nbsp;&nbsp;<span style="color: #000FF; ">foreach</span>&nbsp;&nbsp;Index&nbsp;=&nbsp;0-31&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;90</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;YMM#Index&nbsp;:&nbsp;X86Reg&lt;"ymm"#Index,&nbsp;Index,&nbsp;[!cast<x86reg>("XMM"#Index)]&gt;,<br />
<span style="color: #08080; ">&nbsp;91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DwarfRegAlias<!--cast<X86Reg-->("XMM"#Index)&gt;;<br />
<span style="color: #08080; ">&nbsp;92</span>&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #08080; ">&nbsp;93</span>&nbsp;}<br />
<span style="color: #08080; ">&nbsp;94</span>&nbsp;<br />
<span style="color: #08080; ">&nbsp;95</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;ZMM&nbsp;Registers,&nbsp;used&nbsp;by&nbsp;AVX-512&nbsp;instructions.</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">&nbsp;96</span>&nbsp;<span style="color: #08000; "></span>let&nbsp;SubRegIndices&nbsp;=&nbsp;[sub_ymm]&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;97</span>&nbsp;&nbsp;&nbsp;<span style="color: #000FF; ">foreach</span>&nbsp;&nbsp;Index&nbsp;=&nbsp;0-31&nbsp;<span style="color: #000FF; ">in</span>&nbsp;{<br />
<span style="color: #08080; ">&nbsp;98</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;ZMM#Index&nbsp;:&nbsp;X86Reg&lt;"zmm"#Index,&nbsp;Index,&nbsp;[!cast<x86reg>("YMM"#Index)]&gt;,<br />
<span style="color: #08080; ">&nbsp;99</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DwarfRegAlias<!--cast<X86Reg-->("XMM"#Index)&gt;;<br />
<span style="color: #08080; ">100</span>&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #08080; ">101</span>&nbsp;}<br />
<span style="color: #08080; ">102</span>&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
<span style="color: #08080; ">103</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;Debug&nbsp;registers</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">104</span>&nbsp;<span style="color: #08000; "></span>def&nbsp;DR0&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr0",&nbsp;&nbsp;&nbsp;0&gt;;<br />
<span style="color: #08080; ">105</span>&nbsp;def&nbsp;DR1&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr1",&nbsp;&nbsp;&nbsp;1&gt;;<br />
<span style="color: #08080; ">106</span>&nbsp;def&nbsp;DR2&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr2",&nbsp;&nbsp;&nbsp;2&gt;;<br />
<span style="color: #08080; ">107</span>&nbsp;def&nbsp;DR3&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr3",&nbsp;&nbsp;&nbsp;3&gt;;<br />
<span style="color: #08080; ">108</span>&nbsp;def&nbsp;DR4&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr4",&nbsp;&nbsp;&nbsp;4&gt;;<br />
<span style="color: #08080; ">109</span>&nbsp;def&nbsp;DR5&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr5",&nbsp;&nbsp;&nbsp;5&gt;;<br />
<span style="color: #08080; ">110</span>&nbsp;def&nbsp;DR6&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr6",&nbsp;&nbsp;&nbsp;6&gt;;<br />
<span style="color: #08080; ">111</span>&nbsp;def&nbsp;DR7&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr7",&nbsp;&nbsp;&nbsp;7&gt;;<br />
<span style="color: #08080; ">112</span>&nbsp;def&nbsp;DR8&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr8",&nbsp;&nbsp;&nbsp;8&gt;;<br />
<span style="color: #08080; ">113</span>&nbsp;def&nbsp;DR9&nbsp;&nbsp;:&nbsp;X86Reg&lt;"dr9",&nbsp;&nbsp;&nbsp;9&gt;;<br />
<span style="color: #08080; ">114</span>&nbsp;def&nbsp;DR10&nbsp;:&nbsp;X86Reg&lt;"dr10",&nbsp;10&gt;;<br />
<span style="color: #08080; ">115</span>&nbsp;def&nbsp;DR11&nbsp;:&nbsp;X86Reg&lt;"dr11",&nbsp;11&gt;;<br />
<span style="color: #08080; ">116</span>&nbsp;def&nbsp;DR12&nbsp;:&nbsp;X86Reg&lt;"dr12",&nbsp;12&gt;;<br />
<span style="color: #08080; ">117</span>&nbsp;def&nbsp;DR13&nbsp;:&nbsp;X86Reg&lt;"dr13",&nbsp;13&gt;;<br />
<span style="color: #08080; ">118</span>&nbsp;def&nbsp;DR14&nbsp;:&nbsp;X86Reg&lt;"dr14",&nbsp;14&gt;;<br />
<span style="color: #08080; ">119</span>&nbsp;def&nbsp;DR15&nbsp;:&nbsp;X86Reg&lt;"dr15",&nbsp;15&gt;;<br />
<span style="color: #08080; ">120</span>&nbsp;<img src="http://www.cppblog.com/Images/dot.gif" alt="" /><img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br />
<span style="color: #08080; ">121</span>&nbsp;def&nbsp;GR32&nbsp;:&nbsp;RegisterClass&lt;"X86",&nbsp;[i32],&nbsp;32,<br />
<span style="color: #08080; ">122</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(add&nbsp;EAX,&nbsp;ECX,&nbsp;EDX,&nbsp;ESI,&nbsp;EDI,&nbsp;EBX,&nbsp;EBP,&nbsp;ESP,<br />
<span style="color: #08080; ">123</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R8D,&nbsp;R9D,&nbsp;R10D,&nbsp;R11D,&nbsp;R14D,&nbsp;R15D,&nbsp;R12D,&nbsp;R13D)&gt;;<br />
<span style="color: #08080; ">124</span>&nbsp;<br />
<span style="color: #08080; ">125</span>&nbsp;<span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;GR64&nbsp;-&nbsp;64-bit&nbsp;GPRs.&nbsp;This&nbsp;oddly&nbsp;includes&nbsp;RIP,&nbsp;which&nbsp;isn't&nbsp;accurate,&nbsp;since<br />
</span><span style="color: #08080; ">126</span>&nbsp;<span style="color: #08000; "></span><span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;RIP&nbsp;isn't&nbsp;really&nbsp;a&nbsp;register&nbsp;and&nbsp;it&nbsp;can't&nbsp;be&nbsp;used&nbsp;anywhere&nbsp;except&nbsp;in&nbsp;an<br />
</span><span style="color: #08080; ">127</span>&nbsp;<span style="color: #08000; "></span><span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;address,&nbsp;but&nbsp;it&nbsp;doesn't&nbsp;cause&nbsp;trouble.<br />
</span><span style="color: #08080; ">128</span>&nbsp;<span style="color: #08000; "></span><span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;FIXME:&nbsp;it&nbsp;*does*&nbsp;cause&nbsp;trouble&nbsp;-&nbsp;CheckBaseRegAndIndexReg()&nbsp;has&nbsp;extra<br />
</span><span style="color: #08080; ">129</span>&nbsp;<span style="color: #08000; "></span><span style="color: #08000; ">//</span><span style="color: #08000; ">&nbsp;tests&nbsp;because&nbsp;of&nbsp;the&nbsp;inclusion&nbsp;of&nbsp;RIP&nbsp;in&nbsp;this&nbsp;register&nbsp;class.</span><span style="color: #08000; "><br />
</span><span style="color: #08080; ">130</span>&nbsp;<span style="color: #08000; "></span>def&nbsp;GR64&nbsp;:&nbsp;RegisterClass&lt;"X86",&nbsp;[i64],&nbsp;64,<br />
<span style="color: #08080; ">131</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(add&nbsp;RAX,&nbsp;RCX,&nbsp;RDX,&nbsp;RSI,&nbsp;RDI,&nbsp;R8,&nbsp;R9,&nbsp;R10,&nbsp;R11,<br />
<span style="color: #08080; ">132</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RBX,&nbsp;R14,&nbsp;R15,&nbsp;R12,&nbsp;R13,&nbsp;RBP,&nbsp;RSP,&nbsp;RIP)&gt;;</x86reg></x86reg></div>
<strong><br />再谈安全性</strong>：为保障安全就复杂了，由于密钥及敏感数据存于寄存器，首先要防止寄存器交换/拷贝到内存（为避免读取内存的冷启动攻击、基于cache的侧信道攻击）的一切可能因素，比如进程调度、由信号或异步中断引起的处理器模式切换、系统休眠，如果在用户态实现加解密，就避免不了被调度或切换，因为单核上不可能只运行加解密进程，所以得实现在内核态。这样一来就要在加解密中禁止抢占与中断，考虑到系统响应，禁止的粒度不能过大最小为一个分组，分组加解密前禁止抢占与中断（比如调用linux内核接口<span style="color: #ff00ff;">preempt_disable</span>、<span style="color: #ff00ff;">local_irq_save</span>），解除禁止（比如调用linux内核接口<span style="color: #ff00ff;">preempt_enable</span>、<span style="color: #ff00ff;">local_irq_restore</span>）前必须清零寄存器。在系统休眠时，禁止寄存器复制到内存，休眠恢复时在所有用户态进程恢复前执行密钥初始化，同理系统启动时的密钥初始化也得在用户态进程运行前执行。其次要防止其它用户态进程/内核线程/中断服务程序读写寄存器尤其特权寄存器（为避免用户态或内核态rootkit），所以要修改内核，过滤相关系统调用比如linux的<span style="color: #ff6600;">ptrace</span>，过滤相关内核函数比如linux的<span style="color: #ff6600;">native_set_debugreg</span>/<span style="color: #ff6600;">native_get_debugreg</span>。对于不可屏蔽的中断靠禁止是无效的，只能修改中断处理程序避免寄存器中的密钥数据被扩散到内存，比如在中断处理函数入口处清零相关寄存器。综上基于已知代码修改的防御不能防御恶意加载/修改代码之类的攻击，比如动态安装的内核模块/驱动，但可有效防御冷启动攻击、只读DMA攻击、基于cache的侧信道攻击、用户态权限的软件攻击、内核态的仅运行已有代码的软件攻击<img src ="http://www.cppblog.com/qinqing1984/aggbug/230172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-11-09 16:39 <a href="http://www.cppblog.com/qinqing1984/archive/2023/11/09/230172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于X509证书的身份认证思考小结</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/30/230117.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Sat, 30 Sep 2023 00:00:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/30/230117.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230117.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/30/230117.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230117.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230117.html</trackback:ping><description><![CDATA[<div>
<div style="text-align: center;"><img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/x509-three-auths-2.jpg" width="1232" height="638" alt="" /></div>
&nbsp; 有单向、双向、三向3种认证方式，前两者必须检查时间戳以防重放攻击，单向因为只有一个消息传递，如果仅靠一次性随机数是无法判断消息是否重放。双向有两个消息传递，一来一回，仅靠一次性随机数只能检测到发响应那方的重放。最后者则不必，可仅通过一次性随机数检测自己是否遭遇重放攻击，因为接收第二个消息的那方，通过判断第二个消息中随机数是否等于自己先前已发送第一个消息中的那个，若不等于则为重放，若等于则发第三个确认消息给对方，对方收到并判断确认消息中的随机数是否等于先前它已发送第二个消息中的随机数，若等于则说明第它收到的第一个消息的确是另一方发送的即非重放，否则为重放。因此三向认证可不必同步双方时钟。但正因为不强制检查时间戳而可能导致<span style="color: #ff00ff; font-size: 12pt;">中间人攻击</span>：假设通信双方为A、B，中间人为C，攻击步骤如下</div>
<div>&nbsp;<strong>1</strong>. C与B认证时，发送先前已截获的A到B请求消息给B</div>
<div>&nbsp;<strong>2</strong>. 截获并存储B到A的响应消息x，但不转发，开始与A认证</div>
<div>&nbsp;<strong>3</strong>. 收到A的请求消息后，解密x取出其中的随机数Rb作为响应给A消息中的随机数，用自己私钥签署整个消息后发给A</div>
<div>&nbsp;<strong>4</strong>. 收到并转发A的确认消息给B</div>
<div>以上完成后，C就能冒充A与B通信了。<span style="color: #ff6600;">一种简单的改进方法</span>是先用对方的公钥加密消息中的随机数，再用自己的私钥签署整个消息。关于网络协议的安全性分析，主流方法是形式化分析，可以借助相关工具来验证找出漏洞</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230117.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-30 08:00 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/30/230117.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>浅谈密码学几点安全性分析</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/28/230110.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Thu, 28 Sep 2023 00:04:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/28/230110.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230110.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/28/230110.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230110.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230110.html</trackback:ping><description><![CDATA[1. <strong>对于RSA</strong>，给定大整数n分解的一对素因子p和q，p或q是否素数决定不了安全性，但决定算法的正确性，也就是说p或q不能为合数，而安全性取决于n的位数及p、q的距离，n越大则难于素因子分解（因为素数测试是一个P问题，而因子分解是一个NP问题，其耗时是关于n的指数），|p - q|要大是为抵抗一种<span style="color: #ff00ff;">特殊因子分解攻击</span>，论证如下：由(p+q)<sup>2</sup>/4 - n = (p+q)<sup>2</sup>/4 - pq = (p-q)<sup>2</sup>/4，若|p - q|小，则(p-q)<sup>2</sup>/4也小，因此(p+q)<sup>2</sup>/4稍大于n，(p+q)/2稍大于n<sup>1/2</sup>即根号n。可得n的如下分解法：a) 先顺序检查大于n<sup>1/2</sup>的每一整数x，直至找到一个x使得x<sup>2</sup> - n是某一整数y的平方；b) 再由x<sup>2</sup> - n = y<sup>2</sup> 得 n = (x+y)(x-y)。另外，p - 1和q - 1都应有大素因子（所有因子皆是大素数），以抵抗可能的<span style="color: #ff00ff;">重复加密攻击</span>（重复加密较少步后可恢复出明文）<br />
<br />
2. <strong>对于DH密钥交换</strong>，通常选择阶为素数的有限循环(子)群，这时素数决定了安全性。因素数不能再因子分解，故避免了针对阶为合数的质因子分解且利用中国剩余定理求离散对数的(已知最好)攻击。具体讲就是为了防<span style="color: #ff6600;">index-calculus</span>方法求解离散对数，底层循环群G的素数模p要足够大，长度1024位可实现80位安全等级，长度3072位可实现128位安全等级；另为了防<span style="color: #ff6600;">Pohlig-Hellman</span>攻击，G的阶p-1必须不能因式分解为全部都是小整数的素数因子，且为了p-1的每个因子构成的子群防<span style="color: #ff6600;">baby-step giant-step</span>或<span style="color: #ff6600;">Pollards's rho</span>攻击，要求对80位安全等级而言，p-1的最小素因子必须至少为160位，而对128位安全等级，其至少为256位<br />
<br />3. <strong>对于Hash函数</strong>，安全性要求有三点：第一是单向性，由于压缩函数理论上存在碰撞，因此单向性是指计算不可行，为什么要单向性？因为若不单向，则可从结果比如签名逆出原文消息；第二是抗弱冲突性即<span style="color: red;">第1类生日攻击</span>，计算不可行；第三是抗强冲突性即<span style="color: red;">第2类生日攻击</span>，计算不可行。这三点要求，取决于压缩函数是否能抗差分、线性等密码分析<br /><br />4. 周知<strong>Shamir门限方案</strong>基于多项式的拉格朗日插值公式，普遍的设计采用GF(q)域上的多项式，秘密s为f(0)，q是一个大于n的大素数（n是s被分成的部分数）。正常来讲，参与者个数必须至少是设计时的k，才能恢复出正确的s。如果个数少于k比如k-1，则只能猜测s0=f(0)以构建第k个方程，那么恢复得到的多项式g(x)等同设计时的多项式f(x)的概率是1/q。因为g(x)的项系数可以看作关于s0的同余式即h(s0)=(a+b*s0)mod q的形式，因q为素数，故依模剩余系遍历定理，当s0取GF(q)一值时，则h(s0)唯一对应另一值。所以h(s0)等于f(0)的概率为1/q。由此可见，当q取80位以上，敌手攻击概率不大于1/2<sup>80</sup>，这已经很低了。这种门限方案如同RSA加密，再次佐证了素数越大安全性越高<br />
<br />5. <strong>PGP</strong>是密码学经典应用，体现在首先支持保密与认证业务的正交，即独立或组合，且组合时按认证、压缩、加密的顺序，这个顺序是经考究有优势的；其次会话密钥是一次性的，由安全伪随机数生成器生成，且按公钥加密；最后使用自研的密钥环与信任网解决公钥管理问题。理论本质上，PGP提供的是一种保密认证业务的通用框架，因为具体的对称加密算法、随机数生成、公钥算法，都可依需要灵活选配扩展。PGP有两个问题跟组合与概率相关，一个是算密钥环N个公钥中，密钥ID(64位)至少有两个重复的概率？设所求概率为p，先算任意两个不重复的概率q，令m=2<sup>64</sup>，则q=m!/((m-N)!*m<sup>N</sup>)，则p=1-q，不难看出，N越小则q越大则p越小，因实际应用N&lt;&lt;m，故p非常小可忽略，即PGP取公钥中最低64有效位作密钥ID，是可行的。另一个是签名摘要暴露了前16位明文，对哈希函数安全的影响有多大？这问题意思应该是敌手拿到消息后但没发送方的私钥作签名，只能穷举变换原消息并求哈希值，使之与消息摘要剩余位组相等。这本质是求<span style="color: red;">两类生日攻击</span>碰撞概率大于0.5时所需的输入量。在仅认证模式中，抗弱碰撞计算量降低为原来的1/2<sup>16</sup>，抗强碰撞计算量至少降低为原来的1/2<sup>8</sup>。另外，考虑到这16位明文可能的特殊性，有没更快的代数攻击，需进一步研究<img src ="http://www.cppblog.com/qinqing1984/aggbug/230110.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-28 08:04 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/28/230110.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AES不可约多项式</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/13/230080.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Tue, 12 Sep 2023 18:00:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/13/230080.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230080.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/13/230080.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230080.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230080.html</trackback:ping><description><![CDATA[<div><strong>有理数域的本原多项式与有限域的本原多项式定义不同</strong>，前者不要求不可约（由高斯引理知两个本原多项式的乘积还是本原），后者则必须不可约（确保生成的有限域其每个元素有逆元）。aes基于有限域F{0,1}设计，故使用的模8次多项式不可约<span style="color: #0000ff;"><strong>P(x)=x^8+x^4+x^3+x+1</strong></span>，但不是本原多项式，因为它的阶是51而非255。有限域次数为8的本原多项式有16个、不可约多项式有30个（由莫比乌斯反演推出），具体多项式影响s盒与列混合操作的实现。不可约加之0的逆元规定为0，保证正确加解密。若0的逆元规定为非0比如x，则导致x有两个逆元，便违反了逆元唯一性，除非s盒不用有限域设计。逆元等于其自身的非0元素只有1，原因可类比模素数二次剩余的求解<br /><img src="http://www.cppblog.com/images/cppblog_com/qinqing1984/aes_primitive_polynomial.png" width="720" height="1497" alt="" /></div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-13 02:00 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/13/230080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>总结数论中不定方程定理证明的细节验证</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/07/230066.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Wed, 06 Sep 2023 22:43:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/07/230066.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230066.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/07/230066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230066.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230066.html</trackback:ping><description><![CDATA[<div><strong>1. 整数r&gt;s&gt;0，(r, s)=1，2&#8740;r+s，x=r^2-s^2, y=2rs, z=r^2+s^2，求证(x, y)=1，(y, z)=1</strong></div>
<div>&#8203;证明：由2&#8740;r+s（r与s必一奇一偶）知2&#8740;r-s，故2&#8740;r^2-s^2，以及2&#8740;(r+s)(r+s)。又1=(r, s)=(r+s, r)=(r+s, s)=(r+s, rs)。同理得1=(r, s)=(r-s, rs)，故1=((r+s)(r-s), rs)=(r^2-s^2, rs)，又1=(2, r^2-s^2)，故(r^2-s^2, 2rs)=1，即(x, y)=1。&#8203;(y, z)=(2rs, r^2+s^2)=(2rs, r^2+s^2+2rs)=(2rs, (r+s)(r+s))=(rs, (r+s)(r+s))=(rs, r+s)=(r, r+s)=(r, s)=1</div>
<div>&#8203;注：用最大公约数定义、整除性质、反证法，也可以得出(x, y)=1，(y, z)=1。本法则直接从最大公约数定理推导</div><br />
<div><strong>2. u^2+3v^2=2p不可能成立，u、v为整数，p为奇素数</strong></div>
<div>证明：u^2+3v^2=2p =&gt; u^2+v^2=2(p-v^2) =&gt; &#8203;2|u^2+v^2=(u+v)^2-2uv =&gt; 2|(u+v)^2 =&gt; 2|u+v。得出这个中间结论，再由它可得4|2(u+v)|2v(u+v)=2v^2+2uv，以及4|(u+v)^2=u^2+v^2+2uv，故得4|u^2+3v^2+4uv，继得4|u^2+3v^2=2p，即2|p，所以矛盾，证毕</div><br />
<div><strong>&#8203;3. 若四个正整数y1*x2=y2*x1，(x1,y1)=(x2,y2)=1，则x1=x2，y1=y2</strong></div>
<div>&#8203;证明：由y1*x2=y2*x1可得x1|y1*x2，又因(x1,y1)=1，故x1|x2；另得x2|y2*x1，又因(x2,y2)=1，故x2|x1；终得x1=x2，y1=y2</div><br />
<div><strong>4. 假设2&#8740;z，z^3=x^2+3y^2有解且满足(x, y)=1，其通解形式为x=a^3-9ab^2，y=3a^2b-3b^2，a、b满足z=a^2+3b^2，求证(-3/p)=1，p是z的任一素因子；(a, 3b)=1</strong></div>
<div>证明：先论证中间结论3&#8740;z，p&gt;3且(p, xy)=1。若3|z，则3|x^2+3y^2=&gt;3|x^2=&gt;3|x=&gt;9|x^2，另有9|x^2+3y^2=&gt;9|3y^2=&gt;3|y^2=&gt;3|y，这与(x, y)=1矛盾，故3&#8740;z。又2&#8740;z，得p&gt;3，由此若p|x，则p|3y^2得p|y，或若p|y，则p|x^2得p|x，都与(x, y)=1矛盾，故(p, xy)=1。</div>
<div>再论证勒让德符号(-3/p)=1。由以上中间结论得等价形式x^2+3y^2=(Z^3p^2)p，及p&#8740;x^2、p&#8740;y^2，推得1=(x^2/p)=(-3y^2/p)=(-3/p)。</div>
<div>最后论证(a, 3b)=1。假设2|z，则2|a^2+b^2=(a+b)^2-2ab或(a-b)^2+2ab =&gt;2|a+b, 2|a-b。因题设是2&#8740;z，故2&#8740;a+b, 2&#8740;a-b，由此推得2&#8740;a^2-b^2, 4&#8740;a^2-b^2，进而8&#8740;a^2-b^2，即(8, a^2-b^2)=1。由1=(x, y)=(a^3-9ab^2, 3a^2b-3b^2)=(a(a^2-9b^2), 3b(a^2-b^2))。又(a^2-9b^2, a^2-b^2)=(8b^2, a^2-b^2)=(b^2, b^2-a^2)=(b^2, a^2)=(a, b)^2，于是令a^2-9b^2=(a, b)^2*A, a^2-b^2=(a, b)^2*B，则得1=(x, y)=(a, b)^2*(aA, 3bB)，故(a, 3b)=1</div><br />
<div><strong>5. 已知2&#8740;u+w，3&#8740;u，(u, w)=1，求证(2u, u^2+3w^2)=1</strong></div>
<div>证明：2&#8740;u+w=&gt;2&#8740;u^2+w^2=&gt;2&#8740;u^2+3w^2，即(2, u^2+3w^2)=1。</div>
<div>由3&#8740;u，(u, w)=1得(u, 3w)=(u, 3w^2)=(u, u^2+3w^2)=1。</div>
<div>综上两式结果得(2u, u^2+3w^2)=1</div><br />
<div><strong>6. 已知(3v, w)=1，2&#8740;3v+w，求证(18v, 3v^2+w^2)=1</strong></div>
<div>证明：(3v, w)=1=&gt;(3v, w^2)=(3v, 3v^2+w^2)=1。</div>
<div>(3v, w)=1=&gt;(3, w)=1=&gt;(3, w^2)=(3, 3v^2+w^2)=1。2&#8740;3v+w=&gt;2&#8740;v+w=&gt;2&#8740;v^2+w^2=&gt;2&#8740;3v^2+w^2，即(2, 3v^2+w^2)=1。</div>
<div>综上三式结果得(18v, 3v^2+w^2)=1</div>
<div>###############################</div>
<div>从1、5和6问题的证明过程可得，如果一个数由两个或多个因子相乘，那么求证是否互素可以逐一求每个因子与另一个数是否都互素</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-07 06:43 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/07/230066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AES有限域与域扩张</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/07/230065.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Wed, 06 Sep 2023 22:39:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/07/230065.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230065.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/07/230065.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230065.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230065.html</trackback:ping><description><![CDATA[<div><span style="color: #ff6600;">周知aes有限域同构于系数为F2域一元多项式环的商环，其理想由不可约多项式m(x)=x^8+x^4+x^3+x+1生成，即F2^8&#8780;F2[x]/(m(x))。这次进一步用域扩张的观点分析，可以得知F2[x]/(m(x))正是包涵m(x)零点的扩域，设为K。那么如何理解？</span><br />令I=(m(x))，则K=F2[x]/I，理解关键是找出m(x)在K上的零点，以及K怎样包涵F2？</div><div>1. 零点为~x。这里用~g(x)表示多项式在K中的陪集，即~g(x)=g(x)+I，所以~x=x+I。把~x代入m(x)，根据商环定义的加乘运算，代换结果为m(x)+I=~m(x)=~0（~0是K的零元）。那么还有吗？比如~(x+a)（a非0），~x^2，代入这些得到的陪集代表不等于m(x)，所以不是零点。因此零点是唯一的一次多项式x之陪集</div><div>&#8203;2. 构造映射&#963;，把0对到K中的零多项式即~0，1对到K中的常数多项式即~1，且&#963;(0+1)=~1=~0+~1=&#963;(0)+&#963;(1)，&#963;(0*1)=~0=~0*~1=&#963;(0)*&#963;(1)，又依多项式比较法则得~0不等于~1，故&#963;是单同态，K包涵F2</div><div>&#8203;小结：商群、商环、商域类似模同余之剩余系，理解这些结构的关键是深入理解等价类、陪集，进而可理解正规子群、理想，最后就是商X之类的东西</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230065.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-07 06:39 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/07/230065.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个整数交换群定理的证明</title><link>http://www.cppblog.com/qinqing1984/archive/2023/09/06/230045.html</link><dc:creator>春秋十二月</dc:creator><author>春秋十二月</author><pubDate>Wed, 06 Sep 2023 14:34:00 GMT</pubDate><guid>http://www.cppblog.com/qinqing1984/archive/2023/09/06/230045.html</guid><wfw:comment>http://www.cppblog.com/qinqing1984/comments/230045.html</wfw:comment><comments>http://www.cppblog.com/qinqing1984/archive/2023/09/06/230045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/qinqing1984/comments/commentRss/230045.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/qinqing1984/services/trackbacks/230045.html</trackback:ping><description><![CDATA[<div><strong style="font-size: 12pt;">定理</strong>：集合Z[n]由所有i=0,1,&#8230;, n-1整数组成，其中满足gcd(i,n)=1的元素与乘法模n操作形成了交换群G，且单位元为e=1。</div><div><strong style="font-size: 12pt;">证明</strong>：设a、b属于G，有gcd(a,n)=1，gcd(b,n)=1，则gcd(a*b,n)=gcd(b,n)=1，即(a*b) mod n封闭，显然单位元为1；根据扩展欧几里德算法得a*x+n*y=1，x为a的逆元，则1=gcd(a,n)=gcd(a*x,n)=gcd(x,n)，故x也在G中</div><img src ="http://www.cppblog.com/qinqing1984/aggbug/230045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/qinqing1984/" target="_blank">春秋十二月</a> 2023-09-06 22:34 <a href="http://www.cppblog.com/qinqing1984/archive/2023/09/06/230045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>