RSA算法理论学习解惑――复制粘贴RSA私钥导致tengine出错深入解析

  • 时间:
  • 浏览:1
  • 来源:uu快3计划_uu快3官方_单双

关键性提示头上的含义未知。

d e not congruent to 1

dmp1 not congruent to d

dmq1 not congruent to d

即RSA-CRT算法只前要十个 元素就能能完成模幂运算,不前要用到d.现在也能能清楚了上述crypto_rsa_key行态中最后参数的含义了,即用于RSA-CRT计算用的,且dmp1 dmq1也能能通过d计算得到。

使用d和q参数计算 dmq1,或者我 与私钥文件中解出的dmq1比对查看不是正确.

我以各人理解简单点来解释:公钥能能用n和e代表,私钥能能用n和d代表;且n=p*q算出,e和d前要满足 ed ≡ 1 (mod φ(n)),其中φ(n)代表n的欧拉函数;私钥文件含晒 了这多少参数全部能能实现用来私钥解密和签名等功能了。以m代表明文,c代表密文,所谓"加密"过程,只是我算出下式的c:

me ≡ c (mod n)

所谓解密只是我c的d次方除以n的余数为m:

cd ≡ m (mod n)

或者我 用curl访问https://127.0.0.1:9999端口后, 上述openssl s_server服务打印输出如下:

一一有有另另一一俩个RSA私钥文件中的内容解析如下:

排查过程中大问题如下:

从能能能看出所有的参数都含晒 在私钥文件中。

查32行得知属于privateExponent部分,即属于私钥元素d

在一次配置tengine https服务使用的证书和私钥操作时采用了从原文件基因重组粘贴的土法律方式,当使用tengine启动服务时提示出错:

看来前要搞清楚这多少参数的含义,但要搞清楚这多少参数的作用前要了解rsa加解密的原理,建议先读“RSA算法原理(二)”

http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

主只是我前要对RSA私钥文件中各参数的作用前要全部了解,机会前要数论原理只是,理解openssl代码难度还是很高的,搞了多少小时终于搞明白了原理。

或者我 直接用n d大数来直接使用趋于稳定速率单位不高的大问题,或者我 就有数学大牛们引入了新的算法-中国余数定理,用于解决速率单位的大问题(本文简称为RSA-CRT算法)。解密和签名的过程就改为了 

现在能能理解RSA_check_key(pkey) 函数为或多或少出错了:即拿到私钥文件中dmp1,dmq1,d用公式计算当我们歌词 的关系发现结果不一致只是报错了。

与原文件正确的私钥经过对比发现有一一有有另另一一俩个字符出错,下图中101行代表原始的pem格式私钥数据C13改为了C12,第32行是经过转换后的数据,

首先查openssl中出错时的代码块

这多少参数在openssl中具体定义是

rsa->meth->rsa_mod_exp()最后调用 RSA_eay_mod_exp()此函数实现解密没人用到d参数。

nginx与 openssl s_server都没人调用RSA_check_key函数,而tengine做加载私钥用到了RSA_check_key函数。

推断openssl rsa -in 111.pem –check应该也用到了此RSA_check_key函数

原创文章:来自RSA算法理论学习解惑――基因重组粘贴RSA私钥原因tengine出错深入解析

tengine的代码中使用了RSA_check_key函数进行RSA私钥格式正确性检查,有一次加载私钥测试时tengine reload失败。案例的看点是RSA格式私钥文件中的私钥指数d在tengine实际的加解密计算过程中并没人用到,至于为或多或少请细看下文。

到此本该现在结束了了了,但还有一一有有另另一一俩个大问题为或多或少nginx与 openssl s_server都没人出错,追了一下openssl代码

即ssl握手过程中用到证书与私钥能验证通过!应该能说明证书与私钥真是是配对的。这不机会太奇怪了?!

最后用openssl rsa -in 111.pem –check 才发现有大问题。到底是或多或少原因tengine 判断私钥有大问题?本着刨根问底的精神,联系了做openssl的多少同事,暂时也没人人对这块有深入的研究。非要各人动手分析了。