1、RSA 证书与 CA
1.1、CA 证书发放
CA 在证书的末尾会添加一段签名,让用证明该 CERT 是 CA 发放的。
- 证书
- 对证书的签名
证书体:
typedef struct
{
uint8 cert[CERT_LEN];
uint8 certSign[CERT_SIGN_SIZE];
} CERT;
CA 用自己的私钥对这一段证书 ( cert[CERT_LEN] ) 进行签名,CA 本身会出一个证书,叫做根证书,把公钥放在里面。
根证书体:
typedef struct
{
uint8 root_cert[ROOT_CERT_LEN]; // 根证书公钥
uint8 root_certSign[ROOT_CERT_SIGN_SIZE];
} CA_CERT;
1.2、校验
客户端在接收到一个证书 CERT 时,首先要做的工作是检验该证书是否有效,也就是说,看这张证书是不是 CA 发出来的。
具体步骤:
1) 向 CA 要一张根证书 ( CA_CERT )
2) 用根证书里的公钥对 CERT 里的签名进行校验,如果校验成功,说明该 CERT 是由 CA 签发的,可以信任
2、签名与加密安全技术基础之哈希算法
MD5 和 SHA1 是目前应用最广泛的 Hash 算法,而它们都是以 MD4 为基础设计的。
哈希算法有如下特性:
1) 不可以从消息摘要中复原信息
2) 两个不同的消息不会产生同样的消息摘要
如何保证数据完整性呢?
2.1、MD5 算法
MD5 是 RSA 数据安全公司开发的一种单向散列算法。
MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。
MD5 算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。
md5sum filename.zip
"file_md5": "b1f37a708c8ed2dea463d77cce154a8b",
MD5 严格来说不是加密算法,因此他产生的数据不能叫“密文”。但是它经常被归为“不可逆的加密算法”,一般用作数据库用户密码的保存。
MD5 是一种消息摘要算法,他产生的数据称为“消息摘要值”,MD5 码可以唯一地代表原信息的特征,通常用于密码的加密存储,数字签名,文件完整性验证等。
1) 用作数据库用户密码的加密
Android 数据库存储加密,比如用户名的密码,密码通常采用的就是 md5 哈希值,长度固定,只需要固定 32 个字节属性。
不需要还原明文信息,登录比较,md5(“明文密码”) = 数据库密码 md5 hash 值。
也即对用户输入的密码做 MD5 hash 处理后再与数据库存储的密码 hash 数据对比,即使数据库密码被盗取也无法还原实际密码。
2) 用于文件的完整性检验,比如广升OTA升级包 package.zip 中加入md5哈希序列;
3) 用于数字签名,对重要内容生成 md5 哈希序列,再利用非对称算法 RSA 私钥对 md5 哈希序列加密。
2.2、安全哈希算法 SHA(Secure Hash Algorithm)
主要适用于数字签名标准 ( Digital Signature Standard DSS ) 里面定义的数字签名算法(Digital Signature Algorithm DSA)。
SHA-1: 对于长度小于 2^64 位的消息 (2,097,152TB),SHA-1 会产生一个 160 位的消息摘要,因此抗穷举 (brute-force) 性更好,当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。
在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。
SHA-1 在许多安全协议中广为使用,包括 TLS 和 SSL、PGP、SSH、S/MIME 和 IPsec,曾被视为是 MD5(更早之前被广为使用的散列函数)的后继者。
2.3、签名与加密的核心区别
签名并不改变主体信息内容,并不对信息本身加密。
而加密改变了加密对象原有的数据组织形式、内容,使原有内容变得不可读。
私钥对信息摘要进行加密,这个过程叫签名;
对生成摘要信息的原始内容重新生成摘要,并用公钥对加密的信息摘要进行解密,两者比对的过程,叫签名验证。
refer:
https://blog.csdn.net/kieven2008/article/details/45166327
https://blog.csdn.net/iamshaofa/article/details/7703425