数字签名
为了签署纸质合同并确认合同内容,数字签名用于证明某个数字内容的完整性和来源(或不可否认、非复制)。
在实际的APP应用中,直接对原始消息进行签名存在安全问题,而且原始消息往往较大,直接使用RSA算法进行签名会比较慢,因此需要计算消息的摘要(SHA-256等安全摘要) 只要使用的摘要算法是安全的,这个方案的数字签名是安全的。
数字摘要
twdhk、数字文摘是对数字内容执行散列运算,以获得指向原始数字内容的唯一文摘值。 数字的摘要是解决保证内容没有被篡改的问题(利用Hash函数的耐冲突性特征)。 数字摘要是Hash算法最重要的用途之一。 通过互联网下载软件或文件时,通常还会提供数字文摘值。 用户下载的原始文件可以自己计算,并根据提供的摘要值进行对照,以确保内容没有更改。
让我们来看看具体的场景:
1、lydwt向外部公开公钥,主张对应的私钥在自己手中
2,lydwt针对信息m计算摘要,得到摘要d(digest )
3、lydwt使用私钥对d进行签名,得到签名s(signature )
4、lydwt将m和s一起发送
接收方、验证流程如下。
1、接收者首先针对消息m,使用与lydwt同样的摘要计算方法计算摘要D‘
2 )使用lydwt的公钥对s进行解密,得到摘要d
3,如果d和d’相同,证明m确实是由lydwt发行的,并且没有被篡改
数字证书
数字证书用于证明公钥属于谁,且内容正确。
对非对称加密算法和数字签名来说重要的是公钥的分发。 如果公钥被人替换,典型的情况是中间人攻击等,整个安全系统都会被破坏。
如何确保公钥是某人的原始公钥?
这需要数字证书的机制。
twdhk,数字证书就像证书一样,证明信息的正当性。 由证书颁发机构(CertifiCAtion Authority,CA )颁发,权威的CA中包含verisign等。
数字证书内容可能包括版本、序列号、签名算法类型、颁发者信息、有效期、颁发者、颁发的公钥、CA数字签名和其他信息。 一般来说,由ITU和ISO共同制定的X.509标准应用最为广泛。
其中,最重要的包括发行的公开密钥、CA数字签名这两个信息。 因此,如果通过该证书,则由于附有CA的数字签名,所以能够证明某个公开密钥是合法的。
然后,假设上次的APP应用方案。
1 )现在有第三者还单身的项链。 仍然单身的项链试图欺骗收件人。 她偷偷用收件人的电脑,用自己的公钥交换了lydwt的公钥
2 )此时,接收者实际上还持有单身项链的公钥,但仍然认为是lydwt的公钥。 因此,单身的项链可以冒充lydwt,用自己的私钥创建“数字签名”,向接收者发送消息,让接收者用假的lydwt公钥解密
3、后来,接收者感到奇怪,发现不能确定公钥是否真的属于lydwt。 他想到了一种要求lydwt去“证书中心”(CertifiCAtion authority,ca )进行公钥认证的方法。
4 )证书中心用自己的私钥将lydwt的公钥和一些相关信息一起加密,生成数字证书(Digital Certificate ),由lydwt重新发送,并向签名的同事附加数字证书即可
5、接收者收到消息后,用CA的公钥解密数字证书,得到lydwt的真正的公钥,然后可以证明“数字签名”是否真的是lydwt的。
让我们看看“数字证书”的应用实例。 主要用于网页加密的https协议。
1 .首先,客户端向服务器发出加密请求。
2 .服务器用自己的私钥加密网页,然后与自己的数字证书一起发送到客户端。
3 .客户端(浏览器)的“证书管理器”中有一个“受信任的根证书颁发机构”列表。 客户端将根据此列表检查列表中是否存在用于解密数字证书的公钥。
4 .如果数字证书中的网站与浏览的网站不匹配,则证书可能被滥用,浏览器会发出警告。
5 .如果此数字证书不是由受信任的机构颁发的,浏览器将发出另一个警告。
6 .如果数字证书受信任,则客户端可以使用证书中的服务器公钥加密信息,并与服务器交换加密信息。
多个签名
如果在n个所有者中的至少m个(n1 )签名被收集,则认为是合法的,这样的签名被称为多签名。
其中,n为所提供的公钥个数,m为需要与公钥核对的最小签名个数。
组签名
1991年由Chaum和van Heyst提出。 群签名是群密码学的课题。
组签名具有以下特征: 只有组的成员才能代表组签名(组特性); 接收者可以用公钥验证组签名(验证的简单性); 收件人不能知道组的哪个成员签名(无条件匿名保护); 如果发生冲突,组中的成员或信任机构可以识别签名者(可追踪性)。
d
esmedt 和 Frankel 在 1991 年提出了基于门限的群签名实现方案。在签名时,一个具有 n 个成员的群体共用同一个公钥,签名时必须有 t 个成员参与才能产生一个合法的签名,t 称为门限或阈值。这样一个签名称为(n, t)不可抵赖群签名。环签名
环签名由 Rivest,shamir 和 Tauman 三位密码学家在 2001 年首次提出。环签名属于一种简化的群签名。
签名者首先选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立的产生签名,而无需他人的帮助。签名者集合中的其他成员可能并不知道自己被包含在其中。
盲签名
1983 年由 David Chaum 提出。签名者在无法看到原始内容的前提下对信息进行签名。
盲签名主要是为了实现防止追踪(unlinkability),签名者无法将签名内容和结果进行对应。典型的实现包括 RSA 盲签名)。
HMAC
全称是 Hash-based Message Authentication Code,即“基于 Hash 的消息认证码”。基本过程为对某个消息,利用提前共享的对称密钥和 Hash 算法进行加密处理,得到 HMAC 值。该 HMAC 值提供方可以证明自己拥有共享的对称密钥,并且消息自身可以利用 HMAC 确保未经篡改。
HMAC(K, H, Message)
其中,K 为提前共享的对称密钥,H 为提前商定的 Hash 算法(一般为公认的经典算法),Message 为要处理的消息内容。如果不知道 K 和 H,则无法根据 Message 得到准确的 HMAC 值。
HMAC 一般用于证明身份的场景,如 A、B 提前共享密钥,A 发送随机串给 B,B 对称加密处理后把 HMAC 值发给 A,A 收到了自己再重新算一遍,只要相同说明对方确实是 B。
HMAC 主要问题是需要共享密钥。当密钥可能被多方拥有的场景下,无法证明消息确实来自某人(Non-repudiation)。反之,如果采用非对称加密方式,则可以证明。