密码学领域中,加密算法主要分为对称加密和非对称加密,随着信息时代安全性要求越来越高,对称加密因为其易被破解的原因逐渐被舍弃。而RSA算法是目前密码学世界中比较流行的非对称加密算法,命名是根据其发明者Rives,Shamir,Adleman三人的名字缩写而来。讲到RSA就不得不提到最近"黎曼猜想被正面后RSA算法不在安全"的传言。带着这个问题,讲述完RSA的原理以后会顺带讲一下即便"黎曼猜想"被证实是否对目前一些基于RSA算法的区块链项目有影响。本文的读者默认对于素数,互质,去模的数学概念有一定的了解。

什么是非对称加密?

加密就是对一段明文信息进行特殊操作产生让人无法理解的密文,而解密就是反向前一步的操作。非对称加密就是整个加密过程中需要两个秘钥:公钥和私钥。公钥和私钥是一对,对一段明文进行公钥加密以后只有对应的私钥能解密。大致过程如下:

RSA加密

RSA加密的过程定义的公式如下:

简单说,明文的E次方对N取模的结果就是密文。相信到这里读者的疑问都是E和N到底是什么?其实这里的E和N 就是RSA加密的公钥,它们的用法我已经介绍过了,通常暴露给其他使用者的是E和N的组合。

RSA解密

RSA解密的过程定义如下:

对密文取D次方,在对N取模得到的结果就是明文。这里的D和N的组合就是RSA算法的秘钥,这一步的N和加密用到的N是同一个数。

RSA 生产密钥对

通过上面的两个公式可以看到,只要知道E,D,N的值就很容易实现一次RSA加解密的过程。下面介绍一下这三个数生成的过程:

1.首先准备两个很大的质数p,q。这两个数的选择依据:如果p,q很大,算法的安全性会很高,但是相对应的计算时间会增长。一般编程语言都有对应的库用来生成这样的数据。计算p和q的乘积就得到了值N。

2.根据欧拉函数,不大于N且与N互质的整数个数有(p-1)(q-1)个。φ(n) =(q-1)*(p-1);随机选择一个整数e,要求是φ(n)>e>1,并且e与φ(n)互质,一般选择65537(如果范围允许的话)。

3.前两步生成了公钥,下面生成私钥需要的D:

D需要满足条件:

 

D的值就是 ( φ(n)的倍数+1)/E;

到这一步就简单的实现RSA算法的加解密过程。

RSA算法安全性

相信通过上面的过程读者应该能发现,RSA运用了大量的质数运算,这也正是RSA算法的核心:当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。所以当p,q的值足够大的时候,是很难根据p和q的乘积计算出p和q的值的。注意这里用的是”很难“,这也是RSA算法的缺陷,没有任何理论或概率方面的算法证明RSA算法的破解难度,所以其安全性保障也仅仅在于此,并没有如之前讲SHA256时类比宇宙中原子数量来证明碰撞的难度。RSA的安全性问题还在于这些因式分解算法随着被因式分解的数字变得越大而变得越有效率。也就是说RSA算法的安全性在一定程度上依赖于私钥的长短,而不是其本身的算法。

RSA算法和”黎曼猜想“

在文章的开头讲述了黎曼猜想,今年9月24号,英国著名数学家迈克尔·阿提亚提出了他验证黎曼猜想的思路。我们这里不打算花费大量的篇幅介绍”黎曼猜想“和证明过程。只是希望从本质上告诉读者,”黎曼猜想“的证实和RSA算法的破解是两码事。总结起来一句话就是:”黎曼猜想“被证实的结果是证明了素数的分布是有规律的,它能够帮助我们快速的定位素数的位置。然而想要破解RSA算法的本质是对两个大质数的乘积进行因式分解,这个本质上跟”黎曼猜想“的被证实没有关系。

区块链中的密码学(二)-RSA算法分析和实现的更多相关文章

  1. 区块链中的密码学(-)区块链中运用最广的散列算法-SHA256算法分析与实现

    在很多技术人员的眼中,区块链并不是一种新的技术,而是过去很多年计算机技术的组合运用.而在这个方方面面技术的运用上,基于密码学的加密算法可以说是区块链各种特点得以表现的根本,一旦目前使用的加密算法被证实 ...

  2. 区块链中的密码学(四)- Merkle树和SPV节点

    什么是Merkle Tree? Merkle Tree 的命名来自于美国密码学家Ralph C. Merkle ,关于他的个人资料:传送门https://en.wikipedia.org/wiki/R ...

  3. VRF在区块链中的应用

    最近区块链领域流行了一种"怪病",许多区块链项目或者设计方案都加入了一个叫做VRFs的算法.那么, (1) 什么是VRFs? (2) VRFs在区块链中解决了什么问题? 本文旨在介 ...

  4. 信息摘要算法之七:SHA在区块链中的应用

    最近几年比特币的火爆带动了人们对区块链技术的研究.当然我们在这里并不讨论区块链技术本身,而是讨论一下区块链中的SHA算法的应用.对于SHA系列算法我们已经在前面作了说明,在这里也不再重复. 1.区块链 ...

  5. Merkle tree在区块链中的应用

    上篇博文我们转载了一篇<Merkle Tree(默克尔树)算法解析>,那么大家是不是会有疑问,学习这个算法之后,我们改怎么去应用,区块链中又是如何应用的?今天这篇博客就以Merkle tr ...

  6. 【以太坊开发】区块链中的预言机:Oraclize原理介绍

    智能合约的作用很多,但是很多数据还是要基于互联网,那么如何在合约中获取互联网中的数据?Oraclize就是为了这个目的而诞生的. 工作原理: 智能合约通过对Oraclize发布一个合约之间的调用请求来 ...

  7. 区块链钱包开发 - USDT - 二、创建交易错误以及解决方法

    这里总结了开发中一些常见报错和解决方案 1. 提示:createRawtx_change "Amount is not a number" 解决:参数中 tx 的 amout 需要 ...

  8. 区块链学习7:超级账本项目Fabric中的背书、背书节点、背书策略、背书签名

    ☞ ░ 前往老猿Python博文目录 ░ 在Hyperledger Fabric区块链中,有背书节点进行背书,Hyperledger Fabric 使用背书策略来定义哪些节点需要执行交易. Hyper ...

  9. 【原】用Java编写第一个区块链(二)

    这篇文章将去介绍如何使用区块链进行交易. [本文禁止任何形式的全文粘贴式转载,本文来自 zacky31 的随笔] 目标: 在上一篇文章中,我们已经创建了一个可信任的区块链.但是目前所创建的链中包含的有 ...

随机推荐

  1. Django基础(二)—— models

    六:Models示例 Django本身提供了非常强大易使用的ORM组件,并且支持多种数据库. 配置连接数据文件 在自己创建的project 目录下编辑settings.py DATABASES = { ...

  2. SpringBoot自动化配置之一:SpringBoot内部的一些自动化配置原理

    springboot用来简化Spring框架带来的大量XML配置以及复杂的依赖管理,让开发人员可以更加关注业务逻辑的开发. 比如不使用springboot而使用SpringMVC作为web框架进行开发 ...

  3. C Primer Plus学习笔记(五)- C控制语句:循环

    伪代码的概念: 伪代码是一种用简单的句子表示程序思路的方法,它与计算机语言的形式相对应.伪代码有助于设计程序的逻辑.确定程序的逻辑无误之后,再把伪代码翻译成实际的编程代码.使用伪代码的好处之一是,可以 ...

  4. sass实用知识点

    本文总结sass相关核心知识点 说明:本文的内容是,我在开发实践中总结的实用性比较强的sass知识点,其他未涉及的知识,如果对你有作用请自行查阅 sass知识目录 嵌套 注释 SassScript @ ...

  5. linux中安装sqlmap

    wget https://codeload.github.com/sqlmapproject/sqlmap/legacy.tar.gz/master //下载sqlmap tar zxvf maste ...

  6. 用C++的基本算法实现十个数排序

    冒泡排序法 原理: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 冒泡排序算法的运作如下 ...

  7. c# 类的初步认识

    这里我们把类分为三种: String类(字符串类):Math类(数学类):DateTime类(时间日期类). 在使用类时注意  在输入的过程中代码前面会出现一些符号(紫色立方体代表方法,函数和黑色扳手 ...

  8. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  9. ROS Learning-031 (提高篇-009 A Mobile Base-07) 控制移动平台 --- (操作)人机交互

    ROS 提高篇 之 A Mobile Base-07 - 控制移动平台 - (操作)人机交互 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14 ...

  10. NCBI下载SRA数据

    从NCBI下载数据本来是一件很简单的事情,但是今天碰到几个坑: 1.paper里没有提供SRA数据号.也没有提供路径: 2.不知道文件在ftp的地址,不能直接用wget下载 所以通过在NCBI官网,直 ...