公开密钥算法是在1976年由当时在美国斯坦福大学的迪菲(Diffie)和赫尔曼(Hellman)两人首先发明的(论文New Direction in Cryptography)。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,Adi Shamir和Leonard M.Adleman共同开发的,分别取自三名数学家的名字的第一个字母来构成的。
1976年提出的公开密钥密码体制思想不同于传统的对称密钥密码体制,它要求密钥成对出现,一个为加密密钥(e),另一个为解密密钥(d),且不可能从其中一个推导出另一个。自1976年以来,已经提出了多种公开密钥密码算法,其中许多是不安全的, 一些认为是安全的算法又有许多是不实用的,它们要么是密钥太大,要么密文扩展十分严重。多数密码算法的安全基础是基于一些数学难题, 这些难题专家们认为在短期内不可能得到解决。因为一些问题(如因子分解问题)至今已有数千年的历史了。
公钥加密算法也称非对称密钥算法,用两对密钥:一个公共密钥和一个专用密钥。用户要保障专用密钥的安全;公共密钥则可以发布出去。公共密钥与专用密钥是有紧密关系的,用公共密钥加密的信息只能用专用密钥解密,反之亦然。由于公钥算法不需要联机密钥服务器,密钥分配协议简单,所以极大简化了密钥管理。除加密功能外,公钥系统还可以提供数字签名。
公钥加密算法中使用最广的是RSA。RSA使用两个密钥,一个公共密钥,一个专用密钥。如用其中一个加密,则可用另一个解密,密钥长度从40到2048bit可变,加密时也把明文分成块,块的大小可变,但不能超过密钥的长度,RSA算法把每一块明文转化为与密钥长度相同的密文块。密钥越长,加密效果越好,但加密解密的开销也大,所以要在安全与性能之间折衷考虑,一般64位是较合适的。RSA的一个比较知名的应用是SSL,在美国和加拿大SSL用128位RSA算法,由于出口限制,在其它地区(包括中国)通用的则是40位版本。
RSA算法研制的最初理念与目标是努力使互联网安全可靠,旨在解决DES算法秘密密钥的利用公开信道传输分发的难题。而实际结果不但很好地解决了这个难题;还可利用RSA来完成对电文的数字签名以抗对电文的否认与抵赖;同时还可以利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完性。 公用密钥的优点就在于,也许你并不认识某一实体,但只要你的服务器认为该实体的CA是可靠的,就可以进行安全通信,而这正是Web商务这样的业务所要求的。例如信用卡购物。服务方对自己的资源可根据客户CA的发行机构的可靠程度来授权。目前国内外尚没有可以被广泛信赖的CA。美国Natescape公司的产品支持公用密钥,但把Natescape公司作为CA。由外国公司充当CA在我国是一件不可想象的事情。
公共密钥方案较保密密钥方案处理速度慢,因此,通常把公共密钥与专用密钥技术结合起来实现最佳性能。即用公共密钥技术在通信双方之间传送专用密钥,而用专用密钥来对实际传输的数据加密解密。另外,公钥加密也用来对专用密钥进行加密。
在这些安全实用的算法中,有些适用于密钥分配,有些可作为加密算法,还有些仅用于数字签名。多数算法需要大数运算,所以实现速度很慢,不能用于快的数据加密。以下将介绍典型的公开密钥密码算法-RSA。
RSA算法很好的完成对电文的数字签名以抗对数据的否认与抵赖;利用数字签名较容易地发现攻击者对电文的非法篡改,以保护数据信息的完整性。目前为止,很多种加密技术采用了RSA算法,比如PGP(PrettyGoodPrivacy)加密系统,它是一个工具软件,向认证中心注册后就可以用它对文件进行加解密或数字签名,PGP所采用的就是RSA算法。由此可以看出RSA有很好的应用。
我们的一位开发者意外地将我们的AWS加密密钥放到了Github上。除了很明显要修改密钥外,我们还应该做什么来减少我们在AWS上的应用基础架构受到的伤害?我们应该监控Github来看是否密钥过着其他的敏感数据在这次意外中暴露了吗? 真不幸,你们遭遇的经历太容易发生了。如果AWS加密密钥——或者任何加密密钥——存放于源控制下的目录里,有人意外地将这个密钥随源码放到了Github上。密钥应该独立于源码保存。 但是,在密钥已经暴露的前提下应该做什么呢?修改密码是对的,而且要删除已经暴露的任何密钥配对。一旦删除,任何拿到那个密钥的人就无法使用了。 加密密钥是成对生成的:一个私有密钥和一个公有密钥。公有密钥应该共享给任何人,用来解密你发出的加密信息。当使用密钥对来验证服务器时,服务器可能会存储你的公有密钥。在你创建一个EC2实例时,AWS照顾到了这一点,而且会指定一个密钥对。在Linux的实例中,私有密钥添加到~/.ssh/authorized_keys。最后一步是人工创建一个EC2实例,核实你指派给实例的你拥有的密钥对中的私有密钥。如果你没有这个私有密钥,就无法验证那个服务器。这种情况下假设你无法在服务器上创建逻辑登录机制。 同AWS或者任何云提供商工作的企业应该有一个密钥管理战略。私有密钥应该安全地存储,并且对那些需要使用它们工作的人限制访问。美国国家技术与标准研究所已经有密钥管理的最佳实践建议。AWS也发布了一套安全最佳实践。 在Github或者任何其他的云注册库上存储之前,扫描你的代码可以防止类似的事情再次发生。一些企业使用数据丢失保护应用扫描网络,防止私有或者敏感信息数据泄露,捕捉事件或者恶意泄露,比如社交安全成员。如果你的企业使用了这样的工具,考虑配置一下检测模式找到密钥文件,比如“-----BEGIN RSA PRIVATE KEY-----”。 糟糕的密钥管理不止会导致服务器受牵连,而且如果用来加密数据的密钥丢失了,用这个密钥加密的数据也就丢失了。声音密钥管理是无可替代的。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)