sha1withRSA哈希算法分析


2017年记

  偶然翻到14年写的这篇文章,觉得文章写的比较模糊,再来补充说明下。


简介

sha1withRSA哈希算法的原理跑剖析,sha1withRSA算法的本质是 15字节算法标识 + 20字节哈希值

请结合这篇文章

恶心的openssl。。。

2014原文

参考资料

http://stackoverflow.com/questions/7646259/can-any-one-tell-what-i2d-x509-sig-function-do

http://www.cnblogs.com/adylee/archive/2009/08/03/1537813.html

提问帖子

can any one tell what i2d_X509_SIG() function do..?

i am using openssl 0.9.8g. inside RSA_verify() function decrypoted data is given to the d21_X509_SIG function. what does this function do and why we are doing this step while signing and verifying the signature

我正在使用openssl (0.98g 版本)中的RSA_verify()函数,发现解密后的数据传递给了d2i_x509_sig函数,这个函数做了什么呢?为什么我们签名、验签的时候需要调用这一个步。(译者:翻译的不好,各位看官见笑了 --2014年 jiftle)

openssl
asked Oct 4 '11 at 10:08

1 Answer

The signature is actually not just for the hash (e.g. SHA-256), but for a data structure containing the hash plus some metadata (which hashing algorithm, some parameters and the hash length).That's why after decrypting, the data is decoded into a X509_SIG object and the actual comparison against the reference only performed on sig->digest->data.

这个签名事实上不仅是哈希(例如,SHA-256),而是一个哈希加上一些数据元素(哈希算法、一些参数和哈希长度)。这就是为什么解密到X509_SIG结构的和

sig->digest->data的数据不一致。

Daniel Beck
1,26311322

示例数据一

-------------------------------------------------------------------------------------------------------------------------------------------

哈希算法:sha1

签名
3eda2b913d484b2ec347fe68200f25aadc041e1d199e1f288178bcbd08ad8d7009c17ac44d4de88286b8430553ba61948d317d1c06bd9b3359a08a57e9ce22503e982840b8b6e392ba4d793c5a3012f42edc88daf92376c1efe099ba4f9a045b1fe26c80290bcafe93f438aa2854eb89398896686b6f08932c7c26e7463154920bfeb75726cae1fdba3d26f2a11313def6b4b2c4cf8716c50403c0c928affda0652671dcd5cc66c72fd89d635850179dafe0adfb211e470ac5c9ee39ff012b44d0a9b707f96356f6f1e0ecb85a8ed18951bec317d30af0fa7998dc946123b7e2900600f65e2d66d089602c7b2aae713b55f9575a69ac4011080c24b877ad60bb

公钥数据
3082010a0282010100a01ba9a2d772a1959533752c64f5cee4b5534e14c605b297bcbc23c6d4e9d083ffc3238c95a2c881f989106fec5dc4427ffb4b9358d6ded2ae7d87b8e447b597c921ae6054c77a2545283778d297ade3b15e77df0cd2eba51e8224ff0ca5c970a0e170134195e9c99ba4568f9c7295343c442447015e40d867f2db8a47ac56f7ec4e3596c3bc04e7c9e0a7a58f0ff3070b681017e45fea4f55a0e6e5ff28169f66b4b2da919229427be4be6c7ddb4c69270399bf0e3d990f67e116ddce96f7af323eb8373cf81d6c6118d2c32fffb16ff3d055e4cf1276a0a9e172fb6a17f016638ecf855c6e05b41253af84916c3da54de4a673d1ffe6c44b343fa367ba890f0203010001

解密结果
0001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004149bb631ae07153885e2d3ae693f0ff86ebf5d6f51

3021300906052b0e03021a050004149bb631ae07153885e2d3ae693f0ff86ebf5d6f51(15字节 + 哈希值20字节)

sha1哈希值应该是20字节

数据拆分(ASN.1 结构)

3021300906052b0e03021a05000414                  15字节   摘要算法标识
9bb631ae07153885e2d3ae693f0ff86ebf5d6f51    20字节  sha1哈希值

----------------------------------------

30 21 30 09 06052b0e03021a 05 00 04 14                  15字节

30(类型Sequence) 21(总长度) 30(类型Sequence) 09(长度) 06052b0e03021a 05(类型NULL)00(长度为0)  04(类型字符串) 14(长度)

9bb631ae07153885e2d3ae693f0ff86ebf5d6f51(20字节哈希值)

示例数据二

----------------------------------------------------------------------------------------

为了验证X509_sign调用PKCS#11接口的情况,自己实现了一个PKCS#11的包装壳(68个导出函数),实现时注意C_GetFunctionList应该指向本包装壳的函数,不然错误的使用实际的C_GetFunctionList作返回结构便也就失去意义了。X509_sign的调用方式还是不同的,java中如果使用SHA1WithRSA传入到PKCS#11接口的C_Sign或者C_SignUpdate的数据是完整的明文,但是X509_sign传入的是一个ASN.1 Sequence的一个结构,结构中包含待签名数据的摘要散列。

举例来说:

待加密的数据是Hello World! ,在C_Sign传入的数据中就可以发现Hello World!的SHA-1的摘要散列。

待加密:Hello World!

SHA-1: 2EF7BDE608CE5404E97D5F042F95F89F1C232871

C_Sign:

30 21 30 09 06 05 2b 0e 03 02 1a 05 00 04 14 2e f7 bd e6 08 ce 54 04 e9 7d 5f 04 2f 95 f8 9f 1c 23 28 71

使用ASN.1dump来观察就看的更加清楚了。

帖子截图:

sha1withRSA md5withRSA分析相关推荐

  1. 使用RSA私钥或pfx私钥签名String

    项目有个需求,使用私钥签名请求body内容,放在请求头部,作为头部一个字段内容请求外部服务,签名有二种方式,对方提供私钥串/直接提供pfx私钥文件. 一. 提供私钥串  示例代码如下: public ...

  2. Java实现两种方式 RSA签名, RSA签名校验

    Java实现两种方式 RSA签名, RSA签名校验 通过 .keystore密钥文件实现 生成密钥文件 test2.keystore 相关使用 通过密钥生成器实现 Byte数据转换成 Hex字符串 相 ...

  3. IBM-JDK与Sun-JDK加密算法提供者差异

    最近为客户做了一个工具,需求:客户在命令行下,通过这个工具下载数据包:下载的数据包已加密,只有已登录的用户,才允许解密并使用数据包. 实现并不复杂,流程: 1.用户登录时,采用sha-1+n位随机码加 ...

  4. php pfx rsa pem,使用RSA私钥或pfx私钥签名String

    /** * @param algorithm 签名算法: SHA1WithRSA / MD5withRSA等 * @param password 密码 * @param privateKeyPath ...

  5. python3 如何实现RSA加解密 MD5withRSA/SHA1withRSA/SHA256withRSA签名

    java MD5WithRSA 算法 首先我们来看Java中的 MD5withRSA 签名 JAVA private static final String SIGNATURE_ALGORITHM = ...

  6. 【Android 逆向】APK 文件处理脚本 ApkTool.py ( 脚本简介 | 用法 | 分析 APK 文件 )

    文章目录 一.APK 文件处理脚本 ApkTool.py 二.ApkTool.py 脚本用法 三.ApkTool.py 脚本分析 APK 输出结果 一.APK 文件处理脚本 ApkTool.py Ap ...

  7. MD5 SHA1 SHA256 SHA512 SHA1WithRSA RSA 的区别

    转自:http://www.cnblogs.com/cxygg/p/9468653.html https://blog.csdn.net/hengshujiyi/article/details/459 ...

  8. 手把手教你逆向分析 Android 程序 1

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  9. 用python3实现MD5withRSA数字签名的验证

    在某次安全研究中.需要手工验证下某重要文件MD5withRSA的数字签名是否正确.于是写了个脚本.现记录下来,供大家学习讨论. 1. 数字签名基础知识 数字签名: 一旦选择足够安全的散列算法, 那么就 ...

最新文章

  1. 【408预推免复习】计算机网络(谢希仁第七版)第四章——网络层
  2. LeetCode Intersection of Two Arrays
  3. java openssl 开发_java openssl
  4. BZOJ3173 [TJOI2013]最长上升子序列
  5. 《人民日报》专访姚期智院士:AI是历史性的起跑线机遇
  6. vue遍历data所有变量并赋值
  7. 【IOS下载】Cisco IOS下载
  8. sdram 时钟相位_Nios II 和SDRAM时钟相位计算
  9. 问题:Excel在“xxx.xlsx”中发现不可读取的内容。是否恢复此工作薄的内容?【原创】...
  10. ROBOTS.TXT在SEO优化中的运用(ROBOTS.TXT SEO优化实战)
  11. 破解工具之调试器和相关破解案例视频教程大全
  12. 产品做出来了,我们该怎么办?
  13. 视频教程-人工智能-必备数学基础视频教程-机器学习
  14. 学习视频处理(一),了解HLS,流媒体,视频编码
  15. php变异测试工具,科学网—两种突变检测的matlab代码 - 张凌的博文
  16. 微软拼音打不出中文解决方法
  17. Unity获取天气最稳定的接口
  18. SA387Gr22Cl2美标容器板介绍,SA387Gr22Cl2钢板规格8-90mm厚
  19. 柯桥日语培训:语法 | 「あまり 」知识解析
  20. SVM 之 松弛变量

热门文章

  1. Java Socket 教程
  2. java.io,PrintWriter可以用来创建一个文件并向本文文件写入数据
  3. Android的圆角按钮和按钮颜色
  4. 选择排序由浅到深详细分析和图解
  5. Spring 整合Struts2
  6. 笔记 - AliCloud 云数据库 简介
  7. Oracle 在Sqlplus 执行sql脚本文件。
  8. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)
  9. 在一起 10 年了,这封信你一定要收下
  10. 移植 Python 量化交易 TA-Lib 库到函数计算