密钥密码算法最明显的特征是拿2个相关密钥把加密与解密分开,其中一个密钥是公开的,称为公开密钥,简称公钥,用来加密;另一个密钥给用户专用,因此是保密的,叫做秘密密钥,简称密钥,用来解密,所以公钥密码体制也叫双钥密码体制。
整个加解密的过程可以分成如下步骤。
(1)需要接收消息的端系统,得到一对用于加、解密的密钥,接收者B产生密钥PKB,SKB,其中前者是公钥,后者是密钥;
(2)端系统B公开加密密钥,另一密钥则被保密;
(3)A若要想给B发消息m,就要用B的公钥加密m;
(4)B收到密文后,拿自己的密钥SKB进行解密。
由于仅有B知道SKB,因此他人均不能解密密文。
公钥加密算法不只可用来加、解密,还可以给发方A发的消息m进行认证,用户A用自己的密钥SKA对m加密,把密文发往B,B用A的公钥PKA解密。
由于在m那里得到密文是通过A的密钥SKA加密,仅A才可以实现。所以密文可作为A给m的数字签字。另一方面,得不到A的密钥SKA的所有人是无法篡改m的,因此以上过程认证消息的来源与完整性。
实际应用中,尤其在用户数目非常多时,上面认证方法需特别大的存储空间,由于每个文件均得通过明文形式进行存储,这样便于实际中的使用,且还须存储每个文件在加密之后的密文形式,也就是数字签字,为了方便在有争议时对文件的来源与内容进行认证。改进方法是减小文件数字签字的大小,就是先把文件通过一个函数压缩为较小的比特串,此比特串叫认证符。认证符有这样一个性质:若使认证符的值不动来修改文件计算上行不通。用发送者的密钥加密认证符,加密结果是原文件的数字签字。
上述认证过程中,因消息是拿用户自己的密钥进行加密的,因此消息不会被他人篡改,不过却可被窃听。这是由于无论是谁都能用用户的公钥解密消息。为有认证功能与保密性,可用双重加、解密。