密码学加密
Ⅰ 入门密码学④非对称加密
公钥密码(Public-key cryptography) 也称非对称式密码(Asymmetric cryptography)是密码学的一种算法,它需要两个密钥,一个是公开密钥,另一个是私有密钥; 公钥用作加密,私钥则用作解密 。使用公钥把明文加密后所得的密文,只能用相对应的私钥才能解密并得到原本的明文,最初用来加密的公钥不能用作解密。由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。公钥可以公开,可任意向外发布;私钥不可以公开。
1976年以前,所有的加密方法都是同一种模式:加密和解密使用同样的规则。
1976年,由惠特菲尔德·迪菲(Bailey Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年首次发表 迪菲-赫尔曼密钥交换 。
1977年,Ralph Merkle和Martin Hellman 共同设计了一种具体的公钥密码算法-- Knapsack 。
1978年,罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)共同发表了一种公钥密码算法-- RSA 。
RSA 可以说是现在公钥密码的事实标准 。
在对称密码中,由于加密和解密的密钥是相同的,因此必须向接收者配送密钥。由于解密的密钥必须被配送给接收者,在传输中的过程中存在着被窃听的问题,这一问题称为 密钥配送问题 。
解决密钥配送问题的方法有以下几种:
RSA 是世界第一个广泛使用的公钥算法,可以被用于公钥密码和数字签名。RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。它的强度被认为与分解一个非常大的数字的难度有关。以现代数字计算机的当前和可预见的速度,在生成 RSA 密钥时选择足够长的素数应该使该算法无限期地安全。但是,这种信念尚未在数学上得到证明,并且可能有一种快速分解算法或一种完全不同的破解 RSA 加密的方法。
ab = 1
然而只根据 N 和 E(注意:不是p和q)要计算出 d 是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道D)才可对密文解密。
RSA 是现在最为普及的一种公钥密码算法,但是除了 RSA之外还有其他的公钥密码,基于与 RSA 等效复杂度的不同数学,包括 ElGamal 加密 、 Rabin 方式 和 椭圆曲线加密 。
在密码学中, ElGamal 加密算法 是一个基于迪菲-赫尔曼密钥交换的非对称加密算法。它在1985年由塔希尔·盖莫尔(Taher ElGamal)提出。ElGamal加密算法利用了 求离散对数的困难数。
Rabin 利用了 下平方根的困难度
椭圆曲线密码 是通过将椭圆曲线上的特定点进行特殊的乘法运算实现,它利用了这种乘法运算的逆运算非常困难这一特性。它的特点是所需的密钥长度比 RSA 短。
Ⅱ 目前常用的加密方法主要有两种是什么
目前常用的加密方法主要有两种,分别为:私有密钥加密和公开密钥加密。私有密钥加密法的特点信息发送方与信息接收方均需采用同样的密钥,具有对称性,也称对称加密。公开密钥加密,又称非对称加密,采用一对密钥,一个是私人密钥,另一个则是公开密钥。
私有密钥加密
私有密钥加密,指在计算机网络上甲、乙两用户之间进行通信时,发送方甲为了保护要传输的明文信息不被第三方窃取,采用密钥A对信息进行加密而形成密文M并发送给接收方乙,接收方乙用同样的一把密钥A对收到的密文M进行解密,得到明文信息,从而完成密文通信目的的方法。
这种信息加密传输方式,就称为私有密钥加密法。
私有密钥加密的特点:
私有密钥加密法的一个最大特点是:信息发送方与信息接收方均需采用同样的密钥,具有对称性,所以私有密钥加密又称为对称密钥加密。
私有密钥加密原理:
私有加密算法使用单个私钥来加密和解密数据。由于具有密钥的任意一方都可以使用该密钥解密数据,因此必须保证密钥未被授权的代理得到。
公开密钥加密
公开密钥加密(public-key cryptography),也称为非对称加密(asymmetric cryptography),一种密码学算法类型,在这种密码学方法中,需要一对密钥,一个是私人密钥,另一个则是公开密钥。
这两个密钥是数学相关,用某用户密钥加密后所得的信息,只能用该用户的解密密钥才能解密。如果知道了其中一个,并不能计算出另外一个。因此如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。称公开的密钥为公钥;不公开的密钥为私钥。
Ⅲ 现代密码学加密原理
密码学是在区块链技术中承担着非常重要的角色,但其实,在互联网中,也大量的使用着密码学的技术,本文将介绍现代密码学中的早期加密方法,这将有助于我们理解区块链中的复杂算法。
第二次大战之后,从军方演化而来的互联网慢慢的进入了寻常百姓家,我们能够将一切事物都电子化处理,交易也不例外,于是电子银行也出现了,所有交易都可以通过网络进行。随着互联网用户越来越多,新的问题产生了,加密需要双方共享一个秘密的随机数,也就是秘钥,但从未谋面的两个人,如何就此共享密钥达成一致,而又不让第三方监听这知道呢?这将是现代密码学的目标。
1976年,维特菲尔德和马丁赫尔曼找到了一种巧妙的解决方法,让我们用颜色为比喻来讲解该技巧是如何实现的:
首先,明确我们的目标,发送者和接受者就秘密颜色达成一致,而不让窃听者知道,于是需要采用一种技巧,该技巧基于两点:
一、混合两种颜色得到第三种颜色很容易;
二、得到这种混合色后,想在此基础上知道原来的颜色就很难了, 这就是锁的原理。
朝一个方向容易,朝反方向难,这被称作是单向函数。解决方案是这样的,首先,他们公开对某种颜色达成一致,假设是黄色,然后发送者和接收者随机选取私有颜色,混到公共的黄色中,从而掩饰掉他们的私有颜色,并且将混合颜色发给接收者,接收者知道自己的私有颜色,并将它的混合颜色发给发送者,
然后就是技巧的关键了,发送者和接收者将各自私有颜色加入到另一个人的混合色中,然后得到一种共享秘密颜色,此时,窃听者无法确定这种颜色,她必须有一种私有颜色才能确定,技巧就是这样,对密码学的世界中, 我们需要一个数值的运算过程,这个过程向单一方向很容易,反方向会很难。
我们需要一种朝一方向易,反方向难的数值过程,于是密码学家找到了模算数,也就是取余的函数,(比如46除12的余数是10)。
假设我们考虑用质数做模型,比如17,我们找到17的一个原根,这里是3,它具有如下重要性质,取不同幂次时,结果会在时钟上均匀分布,3是一个生成元,取3的X次方,结果会等可能地出现在0和17中间任何整数上。
但相反的过程就难了,比如给定12,要求这是3的多少次方,这被称为离散对数问题,这样我们就有了单向函数,一个方向计算很容易,但反方向就很难了,已知12,我们只能采用试错法,求出匹配的质数。
这有多难呢?如果数字很小,这还很容易,但模数是长达数百位的质数,那么,想解密是不切实际的,即便借助世界上最强大的计算机,要遍历所有可能的情况,也需要上千年的时间,单向函数的强度取决于反向过程所需要的时间。
解决方案是这样的,首先,发送者和接收者公开质模数和生成元,这里的例子中也就是17和3,然后发送者选择一个私有的随机数,比如15,计算315 mod 17(结果为6),然后公开将此结果发送给接收者,之后接收者选择自己的私有随机数,比如13,计算313mod 17(结果为12),然后公开将此结果发送给对方。
关键在于,将接收者的公开结果,取她的私有数字次方,以获得共享密钥,这里是10,接收者将发送者的公开结果,取她的私有数字次方,结果得到相同的共享密钥,可能大家还不好理解,但他们实际上进行了相同的运算。
考虑发送者,她从接收者接收到的是12,来自313 mod 17,所以她的计算实际上是3∧13∧15 mod 17,而接收者,他从发送者那里接收6,来自315mod17,所以他的计算实际上是3∧15∧13mod17,两种计算结果是相同的,只是指数的顺序不同,调换指数顺序,结果不会改变,他们的结果都是,3取两人私有数字次幂,没有这些私有数字,15或13,第三方将无法求出结果。
第三方会被困在离散对数问题之中,数字足够大时,实践中,她在合理时限内,几乎不可能破解,这就解决了交换密钥的问题,这可以同伪随机数生成器结合使用,为从未谋面的人提供通信加密。
现在区块链常用的算法,如sha256,都是继承单向函数的设计思维,一个方向计算容易,反过来几乎不能破解,来保证安全。
Ⅳ 密码学HASH与对称加密
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。
MD5信息摘要算法 (英语:MD5 Message-Digest Algorithm),一种被广泛使用的 密码散列函数 ,可以产生出一个128位(16 字节 )的散列值(hash value),用于确保信息传输完整一致。2004年,证实MD5算法无法防止碰撞(collision)(如网站: CMD5 ),因此不适用于安全性认证,如 SSL 公开密钥认证或是 数字签名 等用途。
MD5 是哈希算法的一种。
密码加密常见的有以下几种方式:
HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code)的缩写,并在 IPSec 和其他网络协议(如 SSL )中得以广泛应用,现在已经成为事实上的Internet安全标准。它可以与任何迭代散列函数捆绑使用。
如上图中,共有两个流程:
授权设备登录流程:
1、输入账号过后,就把账号作为参数向服务器发送请求
2、服务器根据账号生成对应的key,并传递给客户端
3、客户端拿到key,进行HMAC运算,并将运算结果的哈希值传给服务器
其他设备登录流程:
1、输入账号过后,在本地缓存中找服务器传过来的key,有就登录,没有就把账号作为参数向服务器发送请求
2、服务器要先看这个账号是否开启了设备锁,没有开启就不允许登录,开启了,就向授权设备发送请求,是否授权,如果授权,就将这个账号的key传给其他客户端
3、客户端拿到key,进行HMAC运算,并将运算结果的哈希值传给服务器
但是在这之中有一个潜在的安全隐患问题: 当别人拿到账号和传递的哈希值过后,也就能拿到登录权限,从而不安全。
为了防止上面的问题,注册流程不变,服务器还是保存的有加了key的HMAC哈希值。
1、只是登录的时候,客户端将哈希值与时间戳拼接过后,进行MD5加密,再传给服务器。
2、服务器将注册保存的账号对应的HMAC哈希值,分别与当前时间,和前一分钟拼接再MD5加密,再和客户端传过来的进行匹配,匹配成功则登录成功,否则不成功。
3、注意这里的时间戳是服务器给的时间戳。
常见的加密算法:
应用模式:
AES加密解密都是用到的CCCrypt函数,并且需要导入 CommonCrypto 框架。
Ⅳ 密码学基础(二):对称加密
加密和解密使用相同的秘钥称为对称加密。
DES:已经淘汰
3DES:相对于DES有所加强,但是仍然存在较大风险
AES:全新的对称加密算法。
特点决定使用场景,对称加密拥有如下特点:
速度快,可用于频率很高的加密场景。
使用同一个秘钥进行加密和解密。
可选按照128、192、256位为一组的加密方式,加密后的输出值为所选分组位数的倍数。密钥的长度不同,推荐加密轮数也不同,加密强度也更强。
例如:
AES加密结果的长度由原字符串长度决定:一个字符为1byte=4bit,一个字符串为n+1byte,因为最后一位为'