公钥算法

浅谈RSA加密算法

Deadly 提交于 2020-02-14 00:23:30
一、什么是非对称加密 1、加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2、密钥分为:公钥,私钥   公钥:可以对外给任何人的加密和解密的密码,是公开的 私钥:通过私钥可以生成公钥,但从公钥被认为无法生成公钥(被推导出的概率小到不考虑) 3、当将要加密的内容用公钥加密的时候,只能用私钥来解密 当将要加密的内容用私钥加密的时候,只能用公钥来解密 4、公钥与私钥的关系,利用一个简单的公式来生成公钥和私钥,即非对称加密的公钥和私钥之间存在某一个公式关系 5、常见的非对称加密算法   RSA,DSA 二、什么是RSA算法 RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1) 互质 ;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n,e1),(n,e2)就是密钥对。其中(n,e1)为 公钥 ,(n,e2)为私钥。[1] RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)

iOS 密码学一

天大地大妈咪最大 提交于 2020-02-13 19:08:32
文章目录 MD5加盐和HMAC 加密部分 一个故事讲完https 对称加密的经典算法 2种加密的方式 终端操作加密的命令 MD5加盐和HMAC 123+一堆乱七八糟的东西,前后中间随便加,让别人无法直接破解123 盐的不足之处:1.这个盐是固定的,只要是开发者都得知道这个盐(iOS端,Android端,服务器端)如果泄漏出去就能破戒掉。 2.盐写死了,1.0写入已经对密码加密了,2.0版本如果要改,就不能改了。 HMAC:使用广泛,给定一个密钥,做明文和密钥的拼接,然后做2次MD5的计算。 加密部分 加密算法 —Hash 散列函数。是不可逆的 加密算法不应该都是不可逆的。 以下两种算法是可逆的 1.对称加密 传统的加密算法 加密和解密都使用一个密钥。密钥的保密工作非常重要。 2.非对称加密RSA(现代加密算法) 有公钥和私钥:1.用公钥加密,私钥解密。2.用私钥加密,公钥解密 明文>加密-密文 密文>解密-明文 一个故事讲完https A和B网络聊天,相隔很远,有一天他们突然发现,他们一直是在明文聊天,相当于在网上裸奔,如果任何一个不怀好意的人,都可以监听他们的聊天内容,打开他们传输的数据包,窥探他们的隐私。 A和B就商量做一个数据加密! 逻辑是:发送信息之前,加密;B收到的时候进行解密。 这时对称加密。问题就来了,他们需要先约定一个密钥,约定密钥的过程也会被监听。

RSA算法及Fault Injection攻击数学原理

谁说我不能喝 提交于 2020-02-13 13:22:40
what RSA算法是什么以及实现原理,这个不需要我也轮不到我来讲,比较深入浅出的是阮一峰的两篇《RSA算法原理》博客,大家去谷他一歌即可。 本文需要读者了解非对称加密的概念。 本文提到RSA算法主要是为了讲Fault Injection(以下简称FI)攻击的数学原理,而 讲解FI的数学原理又必须要牵涉到RSA算法的数学原理 。实际上,FI攻击不仅可以针对RSA加密算法,也可以针对其他加密算法,不过RSA加密算法的数学原理相对容易理解,相应的FI攻击的数学原理也相对容易理解,所以挑选RSA算法及其对应的FI攻击原理来展开本文。 作为一篇马桶上读物,本文不会牵涉到艰深晦涩的数学公式推导及证明,因为主要一方面是我不会,另一方面本人自从若干年前丧失数学能力之后,一直对那些满篇数学公式猛推如虎的文章深恶痛绝,感到智商受到万吨伤害之余也忍不住想骂一句《大话西游》里的台词:”一天到晚就知道哦哦哦,完全不管人家受得了受不了“。 因此本文不可避免会牵涉一定的数学公式,但我保证都是高中数学范畴,且会用最通俗化的语言解释what、how以及why。 how 假设有两人S(sender)以及R(receiver),S想要通过RSA算法来加密自己的信息发送给R,具体应该怎么做呢? 对于R来说(注意, 这里是接收者的公钥及私钥计算过程,而不是想当然的发送者的公钥及私钥计算过程 ): 第一步

网摘-HTTPS协议之通信加密过程分析

ぐ巨炮叔叔 提交于 2020-02-11 17:03:43
原文链接: https://www.jianshu.com/p/39ad3e40f7af 备份如下: HTTPS协议之通信加密过程分析 一、准备知识 在开始介绍前,需要首先了解一下消息摘要、数字签名、数字证书的知识 1、消息摘要 - Message Digest 消息摘要(Message Digest) ,又称数字摘要(Digital Digest)或数字指纹(Finger Print)。简单来说,消息摘要就是在消息数据上,执行一个单向的Hash函数,生成一个固定长度的Hash值,这个Hash值即是消息摘要,Hash算法有MD5,SHA。它有以下特征: 无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。 消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。 消息摘要函数是单向函数

HTTPS简介(二):非对称加密RSA

别等时光非礼了梦想. 提交于 2020-02-10 13:02:47
我们如何决定密钥是什么? 如果只有发送方和接收方知道密钥,对称密钥密码术是很安全的。在凯撒密码中,密钥是一个偏移值,这个偏移值决定每个字母应该偏移多少。在我们的例子中,我们使用的偏移值是 3,但是也能是 4 或者 12。 不过这么设计会有个问题:在用信鸽传递信息之前,如果 Alice 和 Bob 之前从没见过,他们没有安全的方式创建一个密钥。如果他们将密钥包含在信息之中,Mallory 将拦截信息并且发现密钥。后果就是:无论 Alice 和 Bob 发送的信息是否加密,Mallory 都能读取或者改变拦截到的信息。 这是一个典型的中间人攻击例子。避免它的唯一方法是改变之前的密码系统。 那么有没有这种方式,Alice 和 Bob 之前从没见过,Alice 想要给 Bob 传递一条信息,一开始Alice 先写一封空的信给Bob ,Bob发一个密钥给Alice。这个密钥要一个特点只能用来加密,对自己加密的文件都没办法解密,只有Bob 才能够解开。也就是说在密钥在传输的过程中即使被Mallory 截获了信鸽,Mallory知道了这个密钥,拿到了这个密钥也只是用来加密,他即使接下里截获到了Alice 用大家都拿到的密钥加密信息发给 Bob的信件,他也没办法解开密文。 这是另外一套密码系统。 他跟之前的有不一样的地方,第一就是他需要两次通讯过程,第二就是给出去的密钥只能用来加密无法用来解密。

一篇搞定RSA加密与SHA签名|与Java完全同步

烂漫一生 提交于 2020-02-08 09:24:00
基础知识 什么是RSA? 答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名。 RSA加密中padding? 答:padding即填充方式,由于RSA加密算法中要加密的明文是要比模数小的,padding就是通过一些填充方式来限制明文的长度。后面会详细介绍padding的几种模式以及分段加密。 加密和加签有什么区别? 答:加密:公钥放在客户端,并使用公钥对数据进行加密,服务端拿到数据后用私钥进行解密; 加签:私钥放在客户端,并使用私钥对数据进行加签,服务端拿到数据后用公钥进行验签。 前者完全为了加密;后者主要是为了防恶意攻击,防止别人模拟我们的客户端对我们的服务器进行攻击,导致服务器瘫痪。 基本原理 RSA使用“密钥对”对数据进行加密解密,在加密解密前需要先生存公钥(Public Key)和私钥(Private Key)。 公钥(Public key): 用于加密数据. 用于公开, 一般存放在数据提供方, 例如iOS客户端。 私钥(Private key): 用于解密数据. 必须保密, 私钥泄露会造成安全问题。 iOS中的Security.framework提供了对RSA算法的支持,这种方式需要对密匙对进行处理, 根据public key生成证书, 通过private key生成p12格式的密匙

RSA签名和验签Util

我怕爱的太早我们不能终老 提交于 2020-02-07 15:39:30
目录 1、DigitalSign类 2、CryptException异常类 3、加签示例 4、验签示例 1、DigitalSign类 import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.security.KeyStore; import java.security.Signature; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateCrtKey; import java.security.interfaces.RSAPublicKey; import java.util.Enumeration; import

RSA 非对称加密原理

丶灬走出姿态 提交于 2020-02-07 10:41:05
RSA 加密原理 步骤 说明 描述 备注 1 找出质数 P 、Q - 2 计算公共模数 N = P * Q - 3 欧拉函数 φ(N) = (P-1)(Q-1) - 4 计算公钥E 1 < E < φ(N) E的取值必须是整数E 和 φ(N) 必须是互质数 5 计算私钥D E * D % φ(N) = 1 - 6 加密 C = M E mod N C:密文 M:明文 7 解密 M =C D mod N C:密文 M:明文 公钥=(E , N) 私钥=(D, N) 对外,我们只暴露公钥。 示例 1、找出质数 P 、Q P = 3 Q = 11 2、计算公共模数 N = P * Q = 3 * 11 = 33 N = 33 3、 欧拉函数 φ(N) = (P-1)(Q-1) = 2 * 10 = 20 φ(N) = 20 4、计算公钥E 1 < E < φ(N) 1 <E < 20 E 的取值范围 {3, 7, 9, 11, 13, 17, 19} E的取值必须是整数, E 和 φ(N) 必须是互质数 为了测试,我们取最小的值 E =3 3 和 φ(N) =20 互为质数,满足条件 5、计算私钥D E * D % φ(N) = 1 3 * D % 20 = 1 根据上面可计算出 D = 7 6、公钥加密 我们这里为了演示,就加密一个比较小的数字 M = 2 公式:C = ME mod

RSA算法原理(二)

只谈情不闲聊 提交于 2020-02-07 09:03:11
转载: http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 上一次,我介绍了一些 数论知识 。 有了这些知识,我们就可以看懂 RSA算法 。这是目前地球上最重要的加密算法。 六、密钥生成的步骤 我们通过一个例子,来理解RSA算法。假设 爱丽丝 要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢? 第一步,随机选择两个不相等的质数p和q。 爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。) 第二步,计算p和q的乘积n。 爱丽丝就把61和53相乘。   n = 61×53 = 3233 n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。 第三步,计算n的欧拉函数φ(n)。 根据公式:   φ(n) = (p-1)(q-1) 爱丽丝算出φ(3233)等于60×52,即3120。 第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。 爱丽丝就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。) 第五步,计算e对于φ(n)的模反元素d。 所谓 "模反元素" 就是指有一个整数d,可以使得ed被φ(n)除的余数为1。   ed ≡ 1

HTTPS原理01 -- SSL/TLS介绍

时光毁灭记忆、已成空白 提交于 2020-02-05 05:20:29
https=http+ssl 顾名思义,https是在http的基础上加上了SSL保护壳,信息的加密过程就是在SSL中完成的 SSL证书的定义:SSL证书是由专门的权威的数字证书颁发机构在验证一个域名的信息之后所发行的数字网络证书,它可以很好地维护网络信息的安全,防止这些信息被第三方所截取或是窃听。 ssl认证指的是客户端到服务器端的认证,它主要是提供对用户以及服务器的认证,对传送的数据进行加密和隐藏,它能够确保数据在传送过程当中不被改变,对于数据的加密性、数据的完整性有一定保障。 https ssl证书颁发后都有一个有效期。有时证书没过期都会出现无效的情况,那可能是电脑系统的时间不对会导致证书过期,因为https ssl证书颁发都有颁发日期和截止日期的。电脑系统当中的时间在证书有效时间之外,就有可能导致浏览器提示网站安全证书过期。 关于SSL证书原理,其实在一个网站部署了SSL证书之后,就相当于为这个网址配置两把密钥,一把叫做公钥,另一把叫做私钥。公钥的作用就是在用户将自己的信息留在这个网站时为这些信息加锁的钥匙,加了锁之后,这些信息就不能被轻易的读取,除非有专门的钥匙打开。而这把打开这个锁的钥匙,就是另一把密钥,也就是私钥。只有这把对应的私钥才可以打开公钥部下的锁,因此在这两把密钥的作用下,可以使客户的信息数据在网站中安全的传入并安全的浏览,不会被他人截取。 一、作用