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

  • 时间:
  • 浏览:0

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

排查过程中哪2个的难题如下:

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

me ≡ c (mod n)

所谓解密假如c的d次方除以n的余数为m:

cd ≡ m (mod n)

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

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

假如直接用n d大数来直接使用居于带宽单位不高的哪2个的难题,假如也有数学大牛们引入了新的算法-中国余数定理,用于处理带宽单位的哪2个的难题(本文简称为RSA-CRT算法)。解密和签名的过程就改为了 

主假如还要对RSA私钥文件中各参数的作用还要全部了解,因为还要数论原理但是 但是 ,理解openssl代码难度还是很高的,搞了2个小时终于搞明白了原理。

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函数

到此本该开始英文英文了,但还有十个 哪2个的难题为哪2个nginx与 openssl s_server都如此出错,追了一下openssl代码

现在可不还要理解RSA_check_key(pkey) 函数为哪2个出错了:即拿到私钥文件中dmp1,dmq1,d用公式计算当当我们 的关系发现结果不一致但是 但是 报错了。

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

十个 RSA私钥文件中的内容解析如下:

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

查32行得知属于privateExponent主次,即属于私钥元素d

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

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

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

d e not congruent to 1

dmp1 not congruent to d

dmq1 not congruent to d

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

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

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

最后用openssl rsa -in 111.pem –check 才发现有哪2个的难题。到底是哪2个因为tengine 判断私钥有哪2个的难题?本着刨根问底的精神,联系了做openssl的2个同事,暂时也如此人对这块有深入的研究。只有另一方动手分析了。

这2个参数在openssl中具体定义是

从上可不还要看出所有的参数都含晒 在私钥文件中。

在一次配置tengine https服务使用的证书和私钥操作时采用了从原文件群克隆粘贴的措施,当使用tengine启动服务时提示出错: