整理密码学的相关知识
密码学的历史可以追溯到几千年前,古今中外都有使用密码学的记载。历史上,战争在很大程度上为密码学提供了应用环境,促进了密码学的发展。按照发展历程,密码学大致可以分为三个阶段:人工加密、机械加密和计算机加密。以下是现代密码学的一些重要进展。
1949年,信息论鼻祖克劳德·艾尔伍德·香农发表了《安全系统的通信理论》一文,将密码学建立在严格的数学基础上,奠定了理论基础,从此成为真正的科学。
1976年,Bailey Whitfield Diffie和Martin Edward Hellman两位密码学家发表了《密码学的新方向》一文,解决了密钥管理问题,将密钥分为加密公钥和解密私钥,提出了密钥交换算法Diffie-Hellman。
65438-0977年,美国国家标准技术研究所制定了数据加密标准,并作为国家标准颁布。
1977年,麻省理工学院的罗恩·里维斯特、阿迪·阿迪·萨莫尔和伦纳德·阿德曼共同提出了RSA加密算法,RSA由他们姓氏的首字母组成。
1997年4月,美国ANSI发起了征求AES(高级加密标准)的活动,并为此成立了AES工作组。经过几年的筛选,比利时的琼·代蒙和文森特·里门设计的Rijndael算法最终被采用,并于2002年5月26日成为有效的加密标准。
按密码体制分:对称密码体制密码体制和非对称密码体制密码体制分别对应对称密码体制和非对称密码体制。
消息摘要算法也叫hash算法,其核心在于单向hash函数,即通过hash函数可以得到对应的hash值,但是不能从hash值推断出原始信息,这是消息摘要算法的根本安全性,我们通常用这个算法来判断数据的完整性。
消息摘要算法,如MD(Message Digest)、SHA(Secure Hash Algorithm)、HMAC(Hash Message authentic ation Code)等,常用于验证数据的完整性,是数字签名算法的核心算法。
我们用微信支付的接口调用来分析总结算法是如何应用的。首先,我们可以打开微信支付的以下相关文档:
微信支付统一订购接口文档
微信支付签名流程
对称加密简单来说就是加密和解密使用同一个密钥,解密算法是加密算法的逆运算。
对称加密算法主要有DES、DESede、DES替代AES算法、IDEA、PBE等。
非对称加密算法称为双密钥或公钥加密算法。与对称加密算法不同,对称加密算法只有一个密钥,非对称加密算法有一个公钥和一个私钥,一个用于加密,一个用于解密。
简单来说:一对密钥公钥A和私钥B,A加密只能被B解密,B加密只能被A解密..
非对称加密算法起源于DH算法(Diffie-Hellman),由W.Diffie和M.Hellman共同提出,该算法为非对称加密算法奠定了基础。让我们先来了解一下密钥交换算法DH和ECDH。
为什么需要密钥交换算法?正如我们前面提到的,对称加密算法使用相同的密钥进行加密和解密。我们可以想一想,怎样才能放心地把一把钥匙交给对方?例如,我们经常使用HTTPS,每个人都说HTTPS加密后是安全的,那么它是如何获得其加密密钥的呢?显然,当我们访问一个https地址时,我们事先并没有一个密钥。客户端和服务器在访问过程中通过握手协议协商的密钥如果服务器直接在网络上传输肯定是不安全的,那么这个过程中发生了什么呢?后面具体分析https的时候我会详细写的。我们先来了解一下这个算法。
DH密钥交换算法的安全性是基于有限域上的离散对数问题。
ECDH密钥交换算法是基于椭圆曲线加密的。
从上图可以看出,DH &:ECDH密钥交换算法的双方都会向对方公开一部分信息,也就是所谓的公钥,即使被他人获取也不会威胁到最终的密钥。这里的关键点是,甲乙双方公布的公钥是不一样的,但是最终生成的密钥两边是一样的。这是算法的原理。有兴趣的可以咨询详细的算法公式,因为最终的密钥不需要互相传输,所以安全性有很大程度的保证。
不对称加密算法:
典型的非对称加密算法有RSA、ECC和ElGamal,RSA算法是基于大数的因式分解问题,而ElGamal和ECC算法是基于离散对数问题。
从上面的消息传递模型可以看出,非对称加密算法遵循“私钥加密,公钥解密”和“公钥加密,私钥解密”的原则,但是有一点需要注意,公钥是公开的,所以需要根据算法的特点来考虑。比如,既然公钥是公开的,那么你用私钥加密敏感数据并传输给第三方是否合适?明显不合适,因为公钥是公开的,别人可以得到公钥,也就意味着你所有的加密数据都可以被解密,所以一个合适的场景,比如私钥加密,就是公钥只用来验证加密的内容,所有人都可以验证。这种情况不关心加密的内容被其他攻击者看到,甚至不关心内容是公开的。对于接收方来说,使用公钥来保证内容没有被篡改就足够了。所以我们通常说的非对称算法“私钥签名,公钥验证签名”,还有一点,“公钥加密,私钥解密”,因为私钥只在我们手里,所以理论上只有我们能解密,是安全的,这一点会体现在https证书验证和握手协议的过程中。
数字签名算法可以看作是一个有密钥的消息摘要算法,这个密钥包含一个公钥和一个私钥。也就是说,数字签名算法是非对称加密算法和消息摘要算法的结合,遵循“私钥签名,公钥验证”的签名认证模式。
数字签名算法是公钥基础设施(PKI)和许多网络安全机制(SSL/TLS、VPN等)的基础。).
数字签名算法要求能够验证数据的完整性,认证数据的来源,并起到抗抵赖的作用。
数字签名算法主要有RSA、DSA和ECDSA,其中RSA算法由整数因式分解问题导出,DSA和ECDSA算法由离散对数问题导出。
我们以蚂蚁金服开放平台上的接口签名方案为例,详细说明以下单据可以打开:
蚂蚁开放平台签名区