密码学的数学基础1-整数 素数 和 RSA加密

news/2025/2/1 9:25:25/

数学公式推导是密码学的基础, 故开一个新的课题 – 密码学数学基础系列

素数 / 质数

质数又称素数。 一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)

素数在公钥密码学中的作用?

用于密钥生成,选取一定长度(512 bit)的素数p和q,计算 N = p ∗ q N=p*q N=pq

公钥密码

RSA__13">RSA (基于大整数质数分解的困难问题)

RSA本身就是建立在分解两个大素数乘积的困难性上。两个大素数,相乘非常容易,也非常快,要分解这个乘积却是极为困难。

RSA算法的安全性是由因式分解的困难程度而定的。如果能够找出因式分解那么破解RSA将很容易。
RSA的建议。两个大质数p和q, p ∗ q = N p*q=N pq=N
p和q的相差比较大。防止对N开平方试探。
p-1和q-1有较大的因子。

椭圆曲线(Elliptic Curve Cryptography, ECC) (基于椭圆曲线上的离散对数问题)

利用的是在椭圆曲线上 乘法运算的逆运算 非常困难 的特性

  • 比特币使用的secp256k1椭圆曲线方程是 x 2 = y 3 + 7 x^2 = y^3+7 x2=y3+7

  • ed25519的椭圆曲线方程: y 2 = x 3 + 486662 x 2 + x , m o d u l o p = 2 255 − 19 y^2 = x^3+486662x^2+x,modulop=2^{255}-19 y2=x3+486662x2+x,modulop=225519

Pailier(基于复合剩余类的困难问题)

是一种用于公钥加密的概率非对称算法,基于复合剩余类的困难问题(Composite Degree Residuosity Classes),构造在模数取为 n 2 n^2 n2 的剩余类{0,1,2,…, n 2 − 1 n^2-1 n21}上(二次剩余)。满足加法同态,即密文相乘等于明文相加: D ( E ( m 1 ) ⋅ E ( m 2 ) ) = m 1 + m 2 D(E(m_1)·E(m_2))=m_1+m_2 D(E(m1)E(m2))=m1+m2

支持加法同态, 乘法其实也是变相的加法:
D ( E ( m 1 ) E ( m 2 ) ) = m 1 ∗ m 2 D(E(m_1)^{E(m_2)})=m_1*m_2 D(E(m1)E(m2))=m1m2

FISCO BCOS采用的是paillier加密算法,支持加法同态。paillier的公私钥兼容主流的RSA加密算法,接入门槛低。同时paillier作为一种轻量级的同态加密算法,计算开销小易被业务系统接受。因此经过功能性和可用性的权衡,最终选定了paillier算法。

术语

  • 最大公约数gcd:辗转相除法,又称欧几里得算法
  • 最小公倍数lcm
  • 二次剩余:X^2在数论中,特别在同余理论里,一个整数X对另一个整数p的二次剩余,是指x的平方除以p得到的余数

数学工具 SageMath

安装计算工具

#下载网页
http://mirror.hust.edu.cn/sagemath/linux/64bit/index.html
#下载连接
wget http://mirror.hust.edu.cn/sagemath/linux/64bit/sage-9.3-Ubuntu_20.04-x86_64.tar.bz2
#解压
tar -xjf sage-9.3-Ubuntu_20.04-x86_64.tar.bz2#运行
cd SageMath
./sage

往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

http://www.ppmy.cn/news/1568389.html

相关文章

进程池的制作(linux进程间通信,匿名管道... ...)

目录 一、进程间通信的理解 1.为什么进程间要通信 2.如何进行通信 二、匿名管道 1.管道的理解 2.匿名管道的使用 3.管道的五种特性 4.管道的四种通信情况 5.管道缓冲区容量 三、进程池 1.进程池的理解 2.进程池的制作 四、源码 1.ProcessPool.hpp 2.Task.hpp 3…

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍:什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎。 作用 1 运行java需要安装JDK,而Node.js是JavaScript的运行环…

Linux网络编程中的零拷贝:提升性能的秘密武器

在当今数字化时代,网络应用的性能至关重要。而在网络编程中,数据传输的效率直接影响着应用的整体性能。传统的数据传输方式往往涉及大量的数据拷贝和上下文切换,这在高并发、大数据量的场景下,会成为性能瓶颈。零拷贝技术的出现&a…

AI赋能未来:Agent能力与AI中间件平台对行业的深远影响

引言 随着人工智能技术的快速发展,AI正在逐步渗透到各行各业。尤其是在“Agent”能力的提升以及AI中间件平台(如Dify)开源生态的推动下,技术的入门门槛显著降低,越来越多的开发者、企业甚至非技术人员都能参与到AI的应…

Python 梯度下降法(三):Adagrad Optimize

文章目录 Python 梯度下降法(三):Adagrad Optimize一、数学原理1.1 介绍1.2 符号定义1.3 实现流程 二、代码实现2.1 函数代码2.2 总代码 三、优缺点3.1 优点3.2 缺点 Python 梯度下降法(三):Adagrad Optimi…

VMware安装win10记录

(1)下载vmware,这个pro现在也免费的,下载地址:https://support.broadcom.com/group/ecx/productfiles?subFamilyVMware%20Workstation%20Pro&displayGroupVMware%20Workstation%20Pro%2017.0%20for%20Windows&release17.6.2&os&…

Vue.js 路由懒加载

Vue.js 路由懒加载 在 Vue.js 开发中,随着应用规模的扩大,打包后的 JavaScript 文件可能会变得相当庞大,影响页面的加载速度和性能。为了解决这个问题,Vue Router 提供了路由懒加载功能,可以将不同路由对应的组件分割…

「pandas」python pandas 初步、数据结构Series、DataFrame、MultiIndex

「pandas」python pandas 初步、数据结构Series、DataFrame、MultiIndex 更多内容请关注本人【pandas】专栏 【目录】 pandas简介 为什么使用pandas pandas数据结构 Series 创建属性索引 DataFrame 创建属性索引 MultiIndex 一、pandas简介 以numpy为基础、借力numpy模块…