Encryption is the process of scrambling or enciphering data so it can be read only by someone with the means to return it to its original state.

End-to-end encryption is any form of encryption in which only the sender and intended recipient can read the message.

No third party, even the party providing the communication service, has knowledge of the encryption key.

End-to-end encryption is the most secure form of encryption that you can use. So where possible, always use end-to-end encryption to protect yourself and your data.

在密码学中,伪装(变换)之前的信息是原始信息,称为明文(plain text);伪装之后的信息,看起来是一串无意义的乱码,称为密文(cipher text)。把明文伪装成密文的过程称为加密(encryption),该过程使用的数学变换方法就是加密算法;将密文还原为明文的过程称为解密(decryption),该过程使用的数学变换方法称为解密算法。

密码学(Cryptology):研究信息系统安全保密的科学。它包含两个分支:
1. 密码编码学(Cryptography),对信息进行编码实现隐蔽信息的一门学问。
2. 密码分析学(Cryptanalytics),研究分析破译密码的学问。

虽然加密作为通信保密的手段已经存在了几个世纪,但是只有那些对安全要求特别高的组织和个人才会使用它。

在1970年代中期,“强加密”(Strong Encryption)的使用开始从政府保密机构延伸至公共领域,并且目前已经成为保护许多广泛使用系统的方法,比如因特网电子商务、手机网络和银行自动取款机等[1]。

密码学的发展大致可以分为3个阶段。

1)1949年之前是密码发展的第一阶段——古典密码体制。古典密码体制是通过某种方式的文字置换进行的,这种置换一般是通过某种手工或机械变换方式进行的,同时简单地使用了数学运算。虽然在古代的加密方法中已体现了密码学的若干要素,但它只是一门艺术,而不是一门学科。

2)1949—1975年是密码学发展的第二阶段。1948年,克劳德·艾尔伍德·香农(Claude Elwood Shannon)发表了题为A Mathematical Theory of Communication(通信的数学理论)的文章。香农理论的重要价值是关于熵(entropy)的概念,他证明熵与信息内容的不确定程度有等价关系。香农提出的信息熵为密码学的发展带来了新气象。借由信息熵可以定量地分析解密一个加密算法所需要的信息量,这标志着密码学进入了信息论时代。1949年,香农发表了题为《保密系统的通信理论》的著名论文,把密码学置于坚实的数学基础之上,标志着密码学作为一门学科的形成,这是密码学的第一次飞跃。然而在该时期,密码学主要用于政治、外交、军事等方面,其研究是被秘密进行的,密码学理论的研究工作进展不大,公开发表的密码学相关论文很少。

3)1976年至今是密码学发展的第三阶段——现代密码体制。1976年,惠特菲尔德·迪菲(Whitefield Diffie)和马丁·赫尔曼(Martin Hellman)在《密码编码学新方向》一文中提出了公开密钥的思想,这是密码学的第二次飞跃。1977年,美国数据加密标准(Data Encryption Standard,DES)的公布使密码学的研究得以公开,密码学得到了迅速发展。1994年,美国联邦政府颁布的密钥托管加密标准(Escrowed Encryption Standard,EES)和数字签名标准(Data Signature Standard,DSS)以及2001年颁布的高级数据加密标准(Advanced Encryption Standard,AES),都是密码学发展史上一个个重要的里程碑。

古典密码学包含两个相互对立的分支,即密码编码学(Cryptography)和密码分析学(Cryptanalytics)。前者编制密码以保护秘密信息,后者研究加密消息的破译以获取信息,二者相辅相成。现代密码学除了包括密码编码学和密码分析学外,还包括密钥管理、安全协议、Hash函数等内容。密钥管理包括密钥的产生、分配、存储、保护、销毁等环节,秘密寓于密钥之中,所以密钥管理在密码系统中至关重要。随着密码学的进一步发展,涌现出了大量的新技术和新概念,如零知识证明、盲签名、量子密码学等。

加密系统采用的基本工作方式称为密码体制。密码体制的基本要素是密码算法和密钥。密码算法是一些公式、法则或程序,密钥是密码算法中的控制参数。

一个密码体制是满足以下条件的五元组(P,C,K,E,D)。

1)P表示所有可能的明文组成的有限集(明文空间)。
2)C表示所有可能的密文组成的有限集(密文空间)。
3)K表示所有可能的密钥组成的有限集(密钥空间)。
4)对任意的k∈K,都存在一个加密算法Ek∈E和相应的解密算法Dk∈D;并且对每一个Ek:P→C,对每一个Dk:C→P,对任意明文x∈P:Dk(Ek(x)))=x。

密码体制可以分为对称密码体制(Symmetric System, One-key System, Secret-key System)和非对称密码体制(Asymmetric System, Two-key System, Public-key System)。在对称密码体制中,加密密钥和解密密钥相同,或者说一个密钥可以从另一个导出,即能加密就能解密,加密能力和解密能力是结合在一起的,开放性差。在非对称密码体制中,加密密钥和解密密钥不相同,从一个密钥导出另一个密钥在计算上不可行,加密能力和解密能力是分开的,开放性好。

除了上述两种密码体制外,还有下列密码体制。

1)确定型密码体制:当明文和密钥确定后,密文也就唯一地确定了。
2)概率型密码体制:当明文和密钥确定后,密文通过客观随机因素从一个密文集合中产生,密文形式不确定。
3)单向函数型密码体制:适用于不需要解密的场合,易将明文加密成密文,如Hash函数。
4)双向变换型密码体制:可以进行可逆的加密、解密变换。

不同的密码体制具有不同的安全强度,通常采用下列安全因素来评价密码体制。

1)保密强度:所需要的安全程度与数据的重要性有关;保密强度大的密码系统,计算开销往往也大。
2)密钥长度:密钥太短,会降低保密强度,密钥太长又不便于传送、保管和记忆。密钥必须经常变换,每次更换新密钥时,通信双方传送新密钥的通道必须保密和安全。
3)算法复杂度:在设计或选择加密和解密算法时,算法复杂度要有限度。通常算法复杂度越高,计算开销越大。
4)传播性:数据加密过程中,不应因一点差错致使整个通信失败。密文扩展度是指加密后密文信息长度相比于明文长度的增加量,增加量太大将会导致通信效率降低。

密码分析是接收者在不知道解密密钥及加密体制细节的情况下,对密文进行分析,试图获取可用信息的行为。密码分析除了依靠数学、工程背景、语言学等知识外,还要依靠经验、统计、测试、眼力、直觉甚至是运气来完成。

破译密码就是通过分析密文来推断该密文对应的明文或者所用密码的密钥的过程,也称为密码攻击。破译密码的方法有穷举法和分析法。

穷举法又称为强力法或暴力法,即用所有可能的密钥进行测试破译。只要有足够的时间和计算资源,穷举法在原则上总是可以成功的。但在实际应用中,任何一种安全的实际密码都会设计得使穷举法不可行。

分析法则有确定性和统计性两类。

1)确定性分析法是指利用一个或几个已知量(已知密文或者明文-密文对),通过数据关系表示出所求未知量。
2)统计性分析法是指利用明文的已知统计规律进行密码破译的方法。

密码分析学的主要目的是研究加密消息的破译和消息的伪造。通过分析密文来推断该密文对应的明文或者所用密码的密钥的过程也称作密码攻击。密码分析也可以发现密码体制的弱点,最终达到上述结果。荷兰人柯克霍夫斯(Kerckhoffs)在19世纪就阐明了密码分析的一个基本假设,即秘密必须全部寓于密钥当中。柯克霍夫斯假设密码分析者已经掌握密码算法及其实现的全部详细资料。当然,在实际的密码分析中密码分析者并不总是具有这些详细的信息。例如,在第二次世界大战时期,美国人就是在未知上述信息的情况下破译了日本人的外交密码。

在密码分析技术的发展过程中,产生了各种各样的攻击方法,其名称也是纷繁复杂。根据密码分析者具有的明文和密文条件,密码分析可分为以下4类。

(1)已知密文攻击

密码分析者有一些消息的密文,这些消息都是使用同一加密算法进行加密的。密码分析者的任务是根据已知密文恢复尽可能多的明文,或者通过上述分析,进一步推算出加密消息的加密密钥和解密密钥,以便采用相同的密钥解出其他被加密的消息。

(2)已知明文攻击

密码分析者不仅可以得到一些消息的密文,而且也知道这些消息的明文。分析者的任务是用加密的消息推算出加密消息的加密密钥和解密密钥,或者推导出一个算法,此算法可以对采用同一密钥加密的任何新消息进行解密。

(3)选择明文攻击

密码分析者不仅可以得到一些消息的密文和相应的明文,而且还可以选择被加密的明文。这比已知明文攻击更有效,因为密码分析者能选择特定的明文进行加密,这些明文可能会产生更多关于密钥的信息。分析者的任务是推导出用来加密消息的加密密钥和解密密钥,或者推导出一个算法,此算法可以对同一密钥加密的任何新消息进行解密。

(4)选择密文攻击

密码分析者能够选择不同的密文,并可以得到这些密文对应的明文。例如,密码分析者存取一个防篡改的自动解密盒,他们的任务是推算出加密密钥和解密密钥。

加密可以用于保证安全性,但是其它一些技术在保障通信安全方面仍然是必须的,尤其是关于数据完整性和信息验证。例如,信息验证码(MAC)或者数字签名。另一方面的考虑是为了应付流量分析。

加密或软件编码隐匿(Code Obfuscation)同时也在软件版权保护中,用于对付反向工程,未授权的程序分析,破解和软件盗版及数字内容的数字版权管理(DRM)等。

加密软件

Name URL Description
TrueCrypt https://truecrypt.ch/ Free open-source disk encryption software for Windows 7/Vista/XP, Mac OS X, and Linux, Old URL: http://www.truecrypt.org/ [GitHub]
VeraCrypt https://veracrypt.fr/ VeraCrypt is a free disk encryption software brought to you by IDRIX (http://www.idrix.fr) and that is based on TrueCrypt.
GnuPG http://www.gnupg.org/ GnuPG is a complete and free implementation of the OpenPGP standard as defined by RFC4880 (also known as PGP).
AxCrypt http://www.axantum.com/axcrypt/ AxCrypt is the leading open source file encryption software for Windows.
Cryptomator https://cryptomator.org/ Protect your privacy by encrypting your cloud files [GitHub]
age https://github.com/FiloSottile/age age is a simple, modern and secure file encryption tool, format, and Go library. Rust edition [rage]
EncFS https://github.com/vgough/encfs EncFS: an Encrypted Filesystem for FUSE.
CryFS https://www.cryfs.org/ Cryptographic filesystem for the cloud [GitHub]
gocryptfs https://nuetzlich.net/gocryptfs/ Encrypted overlay filesystem written in Go [GitHub]
eCryptfs https://www.ecryptfs.org/ The enterprise cryptographic filesystem for Linux [Code]
fscrypt https://github.com/google/fscrypt Go tool for managing Linux filesystem encryption

SSL软件

Name URL Description
OpenSSL http://www.openssl.org/ OpenSSL is an open source project that provides a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security (TLS) and Secure Sockets Layer (SSL) protocols.
PolarSSL https://polarssl.org/ SSL Library PolarSSL
mbed TLS https://tls.mbed.org/ mbed TLS (formerly known as PolarSSL) makes it trivially easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products, facilitating this functionality with a minimal coding footprint.
CyaSSL https://github.com/cyassl/cyassl CyaSSL is a small, fast, portable implementation of TLS/SSL for embedded devices to the cloud
wolfSSL https://www.wolfssl.com/ wolfSSL (formerly CyaSSL) is a small, fast, portable implementation of TLS/SSL for embedded devices to the cloud. [GitHub]
LibreSSL http://www.libressl.org/ LibreSSL is a version of the TLS/crypto stack forked from OpenSSL in 2014, with goals of modernizing the codebase, improving security, and applying best practice development processes.
BoringSSL https://boringssl.googlesource.com/boringssl/ BoringSSL is a fork of OpenSSL that is designed to meet Google’s needs.
GmSSL http://gmssl.org/ 支持国密SM2、SM3、SM4算法的OpenSSL分支 [GitHub]
TASSL https://github.com/jntass/TASSL 支持SM2 SM3 SM4国密算法和国密openssl协议的TASSL
MatrixSSL http://www.matrixssl.org/ Lightweight Embedded SSL/TLS Implementation for IoT Devices [GitHub]
Rustls https://github.com/ctz/rustls A modern TLS library in Rust
MesaLink https://mesalink.io/ MesaLink is a memory-safe and OpenSSL-compatible TLS library. [GitHub]
Forge https://github.com/digitalbazaar/forge A native implementation of TLS in Javascript and tools to write crypto-based and network-heavy webapps
GnuTLS https://www.gnutls.org/ GnuTLS is a secure communications library implementing the SSL, TLS and DTLS protocols and technologies around them.
Tongsuo https://www.tongsuo.net/ 铜锁/Tongsuo is a Modern Cryptographic Primitives and Protocols Library. [GitHub] [Doc]

加密算法就是加密的方法。

加密算法可以分为两类:对称加密和非对称加密

在密码学中,加密是将明文信息隐匿起来,使之在缺少特殊信息时不可读。

对称加密就是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。

非对称加密,又称公开密钥加密,是加密和解密使用不同密钥的算法,广泛用于信息传输中。

对称密钥加密

算法 密钥长度 块大小 说明
DES 56 64 Data Encryption Standard
3DES 56, 112, 168 64 Triple DES
AES 128, 192, 256 128 Advanced Encryption Standard
Twofish 128, 192, 256 128 -
Blowfish 1 ~ 448 64 -
IDEA 128 64 International Data Encryption Algorithm
RC4 4 ~ 2048 ? -
RC5 4 ~ 2040 32, 64, 128 -
RC6 128, 192, 256 128 -
SM4 128 128 -

非对称密钥加密

RSA、ElGamal、背包算法、Rabin(Rabin的加密法可以說是RSA方法的特例)、Diffie-Hellman (D-H) 密钥交换协议中的公钥加密算法、Elliptic Curve Cryptography(ECC, 椭圆曲线加密算法)。

http://www.secg.org/ - Standards for Efficient Cryptography Group
https://www.w3.org/TR/WebCryptoAPI/ - Web Cryptography API
https://w3c.github.io/webauthn/ - Web Authentication: A Web API for accessing scoped credentials
https://fidoalliance.org/ - FIDO Alliance
https://www.engelke.com/fluent/ - Web Cryptography Resources


Programming Libraries - https://webencrypt.org/library/

https://www.w3.org/TR/WebCryptoAPI/ - Web Cryptography API
https://www.w3.org/TR/webauthn/ - Web Authentication: A Web API for accessing scoped credentials
https://en.wikipedia.org/wiki/PKCS - Public Key Cryptography Standards
https://tools.ietf.org/html/rfc4880 - OpenPGP Message Format
https://tools.ietf.org/html/rfc5751 - Secure/Multipurpose Internet Mail Extensions (S/MIME)
https://en.wikipedia.org/wiki/Cryptography_standards - Cryptography standards

https://github.com/sobolevn/awesome-cryptography - A curated list of cryptography resources and links
https://github.com/pFarb/awesome-crypto-papers - A curated list of cryptography papers, articles, tutorials and howtos.
https://cryptography.rs/ - Showcase of notable cryptography libraries developed in Rust GitHub