本文旨在探讨数字签名以及数字证书在常见场景中的作用以及意义,这里先公布答案。数字签名是一种用于验证数据完整性和真实性的技术。通过数字签名,我们能够确认数据在传输过程中没有被篡改,并且确实来自于预期的发送者。数字证书是数字签名的应用之一,它包含了与证书主体相关的身份信息、公钥以及由证书颁发机构(CA)签发的数字签名。数字证书在建立安全连接和身份验证时发挥着至关重要的作用。
我们以非对密码算法RSA为例,假设Bob生成一对秘钥(公钥,私钥),Alice要发送一个文件给Bob,文件的内容可能会被Eve窃听,因此,需要对文件的内容进行加密,即Alice通过公钥对文件加密后,将秘文发送给Bob,而手持私钥的Bob则可以对文件进行解密,这样就防止了文件被泄露的可能。
问题:由于秘钥中公钥是公开的,即所有人都可以获得,如果Eve自己也通过公钥对文件进行加密并发送给Bob,Bob无法判断这个文件的内容是否来自于Alice。
假设Alice生成一对秘钥(公钥,私钥),Alice要发送一个文件给Bob,Alice通过对文件进行哈希运算获取对应哈希值H,Alice用私钥对这个哈希值进行加密得到数字签名,Alice通过将文件与数字签名打包发送给Bob,那么Bob通过对文件进行哈希运算得到哈希值H,并通过公钥对数字签名进行解密得到原文,将原文与哈希值进行比对,即可判断文件的发送者是Alice。
问题:这个过程没有对文件进行加密,因此,文件的内容被暴露在通信过程中,窃听者Eve可以知道Alice发送给Bob的内容。
为了解决以上两个场景中存在的问题,Alice与Bob各自生成秘钥(公钥A,私钥A,公钥B,私钥B),这里还是假设Alice要发送文件给Bob,Alice通过用公钥B对文件进行加密,随后对加密后的文件内容进行哈希运算,得到哈希值,再用私钥A对哈希值进行加密得到该数字签名,随后Alice将加密文件与数字签名发送给Bob,Bob收到加密文件与数字签名后,Bob对加密文件进行哈希运算,并用公钥A对数字签名进行解密并与哈希值进行比对,如果一致,则证实该文件确实由Alice发送而来,随后用私钥B对文件进行解密,得到原文。
通过双方各自持有一套秘钥的操作,可以确保要发送的文件内容已加密,即使被窃听,Eve也无法知道文件内容,又保证了文件的发送者确实是Alice。
问题:如何确保秘钥中公钥的持有者就是指定的人呢?即公钥=Alice?如果Eve在一开始就冒充Alice生成一套秘钥,并与Bob进行通信,这该如何解决,由此我们将引入数字证书的概念。
我们将引入一个具备强大公信力的第三方CA(Certificate Authorization),该机构也有一套自己的秘钥体系,即(公钥,私钥)。Alice将自己的身份信息以及公钥发送CA机构,CA机构用私钥对这些内容的哈希值进行加密得到一个数字签名,将数字签名与Alice的身份信息以及Alice持有的公钥三者一体形成了数字证书,由此,当Alice向Bob发送自己的公钥时,会将数字证书发送给Bob,Bob通过公钥(CA机构的公钥)对其中的数字签名进行解密,与对应内容的哈希值进行比对,由此可以证实公钥的确来自于Alice。
问题:如何保证Bob持有的CA机构的公钥真的来自该机构呢?
通常,在安装操作系统时会形成一个根证书,这是无法修改的,直接在源头保证了公钥的真实性。(这也提醒我们,不要去安装盗版系统)。
上述场景仅为我个人想法,若有表达错误的地方,还望纠正。