公钥加密

有趣的椭圆曲线加密

六眼飞鱼酱① 提交于 2020-02-14 04:11:06
一、概述 椭圆曲线加密算法依赖于椭圆曲线理论,后者理论涵盖的知识比较深广,而且涉及数论中比较深奥的问题。经过数学家几百年的研究积累,已经有很多重要的成果,一些很棘手的数学难题依赖椭圆曲线理论得以解决(比如费马大定理)。 本文涉及的椭圆曲线知识只是抽取与密码学相关的很小的一个角落,涉及到很浅的理论的知识,同时也是一点比较肤浅的总结和认识,重点是利用椭圆曲线结合数学技巧阐述加密算法的过程和原理。 本文特意构造有比较多的实例方便理解其过程和原理。 二、椭圆曲线 椭圆曲线方程来源于椭圆积分,后者来最初来源于计算椭圆周长的问题,有一段时间的历史了,在欧拉时期就开始研究。椭圆周长没有精确的初等函数的公式表示,只有近似的公式表示,精确的椭圆周长可以用不定积分表示。 现在一般将形如如下形式的积分定义为椭圆积分: $f(x)=\int_{c}^{x}R\left [ t,\sqrt{P(t)} \right ]d_{t}$ 其中$R$是其两个参数的有理函数,$P$是一个无重根的3或4阶多项式,而$c$是一个常数。椭圆曲线方程与$P(t)$表现形式比较相像。 数学上的椭圆曲线一般由如下形式给出: $E:y^{2}=x^{3}+ax^{2}+bx+c$,其中判别式$\Delta (E)=-4a^{3}c+a^{2}b^{2}-4b^{3}-27c^{2}+18abc\neq 0$

浅谈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比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。 消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。 消息摘要函数是单向函数

比特币之七交易的验证

南楼画角 提交于 2020-02-11 01:32:16
正在学习区块链,如果我哪里有错误希望大家指出,如果有任何想法也欢迎留言。这些笔记本身是在typora上写的,如果有显示不正确的敬请谅解。笔记本身也是给我自己写的,所以如果有侵权的请通知我,我立即删除。 7.交易的验证 7.1 前戏 下面讲的这些交易的验证其实都是在block body中,就是一次次的交易,之前的那些都是在block header中的数据。 图片最上面左侧的BTC-Output是指UTXO中的前一个比特币的输出,右侧unspent就是剩下的钱,spent就是花掉的钱,这个交易已经收到了23个交易,这都是之前讲过的。 “下面是这个交易的具体内容”,肖老师是这么说的, 我的理解是这就是merkle tree中的一个节点。一个确定的交易内容。VIN和VOUT是数组,太长了,放在下面单独说。我觉得下面这种格式不太正确,因为对于一次交易来说,vin和vout不是下面这种存放方法的。 **txid:**交易的id,transaction id **hash:**交易的哈希值,不是nonce的那个,那是什么呢?不知道 **version:**使用的比特币协议的版本号 **size:**这个交易的大小 **locktime:**交易的生效时间,一般来说都是0,立即生效。有的特殊的交易会用到这个值,比如有的交易会在10个区块后生效 **block hash:**这个区块所在的哈希值

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格式的密匙

加签/验签、加密/解密、公钥/私钥

↘锁芯ラ 提交于 2020-02-07 15:50:20
转载请保留来源: http://www.cnblogs.com/iceJava/p/7603706.html 看了网上的很多资料,发现有些点没有说到,也比较复杂,这里根据个人的理解,简单描述,方便记忆。 先理解 公/私 钥(yue)的意思: 私钥 ,即 私人 的钥匙,是唯一的,所以可以用来证明来源是特定的人 公钥 ,即 公用 的钥匙,我可以将它给很多人(公众)。所以既然那么多人都知道,所以公钥并不能证明来源一定是特定的人 在理解 加密、签名 的作用:    加密 :用于防止信息外泄(泄露给不相关的人)    签名 :用于确认身份(可以类比下信用卡上的签名) ----> 到底谁 创建、 拥有、使用 公/私 钥(yue)( 这里很多人会混淆,而且网上很少有人说明,但 很重要 )? <---- 以 加签/验签 为例:   1. A 想 使用 我的服务,为了安全,我不希望 A 以外的人可以使用这些服务      创建 :       此时,我会要求 A 创建 一对 公私钥 ,私钥他自行保留(用于证明他自己的身份),公钥给我(用于验签--验证签名)      拥有 :       此时 我拥有 A 的公钥 , A 拥有自己的私钥      使用:        A 请求 我的服务 时,使用私钥签名( 具体如何签名,自行百度吧,这方面的内容真的很多 )       我 收到请求后,用 A

RSA 加密 解密 公钥 私钥 签名 加签 验签

二次信任 提交于 2020-02-07 15:48:37
   http://blog.csdn.net/21aspnet/article/details/7249401#    http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html    http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html   三篇文章写得都非常好。   第一篇已经可以非常清楚细致的了解大概的在软件中应用加密和解密的过程或者说含义。   第二篇和第三篇可以非常详细的了解学习了RSA加密解密的具体过程,里面也设计到了很多高数的东西。数学底子好的可以深入了解一下。或者我再总结一下。   就是,有两个很大的质数相乘得到了一个很长的数。比如ABCDEFG七个字母是秘钥,我给你AB(CER文件)告诉你用这个加密,那么BC就是我的公钥,任何人都可以用这个东西加密,加密完之后发送给我,那么我的秘钥是根据RSA算出来的,也就是说只要你的加密过程没问题,那么我就可以用我的CDEFG私钥(pfx文件)来解密,解密完之后就是你要发给我的文件。如果解密失败了,那就是公钥或者私钥没对上,出了问题。   一句话就是,我有一把锁(公钥)一把钥匙(私钥),你把数据放到锁(公钥)里面传给我,我就用我的钥匙(私钥)来打开,再给我数据就好了。