Cryptography

概述

参考:

Cryptography(密码学)。大多数现代密码可以通过多种方式进行分类

  • 第一种分类方式:依据加密时对明文的分解方式
  • 第二种分类方式:依据密钥的使用方式

密码学背景

在现代时代之前,密码学着眼于消息的机密性(即加密),即将消息从一种可理解的形式转换为一种难以理解的形式,然后又在另一端再次转换,从而使拦截器或窃听者在没有秘密知识(即所需的密钥)的情况下无法读取该消息。用于解密该消息)。加密试图确保保密的通信,如那些间谍,军事领导人和外交官。在最近的几十年中,该领域已经超出了对机密性的关注范围,包括消息完整性检查,发送者/接收者身份验证,数字签名,交互式证明和安全计算等。

经典密码学

现代密码学

现在我们谈论的密码学,都是现代密码学的范畴

Public-key cryptography(公开密钥加密、非对称密钥加密),以及根据公开密钥加密方式而衍生出的其他认证授权等基础设施,是当代最常见,也是最常用的方式.

现代加密方式

Symmetric Key Algorithm(对称密钥算法)

参考:

使用相同的密钥来加密明文和解密密文。Symmetric Key Algorithm 也称为 对称密钥加密

加密规范:

  • DES # Data Encryption Standard 数据加密标准。已被破解
  • 3DES # 3 倍的 DES。最常用
  • AES # Advanced Encryption Standard(高级加密标准)。最常用
  • Blowfish
  • Twofish
  • IDEA # 商业加密算法

SKA 特点

特性:

  • 加密和解密使用同一个密钥,效率高
  • 将原始数据分割成固定大小的块,逐个进行加密

缺点:

  • 密钥过多
  • 密钥分发(分发密钥过程无法保证),为了解决对称加密算法每个人需要保存密钥过多的问题,可以使用公钥加密
  • 数据来源无法确认

Public Key Cryptography(公开密钥密码学)

参考:

Public Key Cryptography(公开密钥密码学) 也称为 Asymmetric Key Algorithm(非对称密钥算法)公开密钥加密,它是计算机通信安全的基石,保证了加密数据不会被破解。1976 年以前,所有的加密方法都是同一种模式:

  • 甲方选择某种加密规则,对信息进行加密
  • 乙方使用同一种规则,对信息进行解密

加密规范:

  • RSA
  • DSA
  • ELGamal

由于 Symmetric-key algorithm(对称密钥算法) 的加密和解密使用同样规则,导致这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。因为大多数情况下,其实两方之间的通信,只有一方是需要加密的,另一方只需要知道信息内容。

1976 年,两位美国计算机学家 Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman 密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。

这种新的加密模式就被称为"非对称密钥算法"。

(1)乙方生成两把密钥(公钥和私钥)。公钥是公开的,任何人都可以获得,私钥则是保密的。 (2)甲方获取乙方的公钥,然后用它对信息加密。 (3)乙方得到加密后的信息,用私钥解密。

如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。

1977 年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做 RSA 算法。从那时直到现在,RSA 算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有 RSA 算法。

这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长 RSA 密钥是 768 个二进制位。也就是说,长度超过 768 位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024 位的 RSA 密钥基本安全,2048 位的密钥极其安全。

PKC 特点

  • 这种加密方式,需要一对密钥。只有公钥可以加密,私钥不能用来加密数据。
  • Public key(公钥) # 公开给所有人。用来加密数据、验证签名。使用公钥把明文加密后所得的密文,只能使用对应的私钥才能解密并得到原本的密文。反之不行。
  • Secret key(私钥) # 自己留存,必须保证其私密性。用来解密数据、签名。使用私钥创建数字签名,只能使用公钥才能验证该数字签名的有效性。反之不行。
    • 一般情况,密钥对是通过程序自动生成的。首先生成私钥后,公钥包含在私钥当中
  • Digital signature(数字签名)。签名提供的是真实性,而不是保密性。
    • 所谓的数字签名,就像人们日常生活中在文件上签字一样,都是签名的一种。
    • 而所谓的验证签名,其实就像日常生活中,看看签名的人的笔记与签名是否一致,等等类似的行为

总结一下:既然是加密,那肯定是不希望别人知道发送给我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证

  • 这种加密方式由于是单向加密、单向解密,所以如果双方都想要加密,则需要两对密钥,双方各自用对方的公钥加密信息发送给对方,然后双方再用自己的私钥解密阅读信息。

缺点

  • 公钥加密可能出现的问题:当两者需要通信的时候,需要把公钥发送给对方,但是公钥是谁都可以获取的,那么在二者通信过程中,公钥就有可能被劫持,当公钥被劫持,劫持者把自己的公钥再发送给对方,那么双发再收到的信息,就是被劫持者篡改过的信息了。

应用场景

  • 如果 A 持有私钥,B 持有对应公钥。那么此时 B 用对方的公钥加密一个对称密钥并发送给 A,A 使用私钥解密,以获得 B 发送的对称密钥,这时再发送的数据可以使用对称加密。
  • 在互联网的 C/S 架构场景中。Server 公开公钥,Client 使用公钥加密信息发送给 Server(发送密码等敏感信息),Server 使用私钥解密后响应时,使用私钥签名,以便 Client 可以用公钥验证 Server 的真实性(防止钓鱼网站)。
  • 如图所示,Alice 在一条消息的末尾签了名,消息内容是 Hello Bob!,这段签署的内容一般是对消息内容进行 hash 计算后,使用 Alice 的私钥的出来的。鲍勃同时收到消息和签名。他使用 Alice 的公钥来验证消息的真实性,即,如果使用公钥计算得出来的消息与原始消息完全匹配,那就证明,这条消息确实是 Alice 发送的。

Cryptographic hash function(单向加密、加密散列函数)

只能加密,不能解密,提取数据特征码,用来保证数据的完成性,实现数据的完整性校验

通常用来做数字证书的数字签名,提取数据的特征码后进行加密并放到数据后端,用来校验证书的完整性,所以证书的内容是被认可的

特点:定长输出、雪崩效应(原始数据的微小改变会导致计算结果的完全不同)

算法:

  1. md5
  2. sha1
  3. sha256
  4. sha384
  5. sha512….等

MAC:Message Authentication Code(消息认证码),单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性


最后修改 March 25, 2025: clearup (feb59d93)