码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【无标题】


    RSA-CRT

    • 前言
    • 一、中国剩余定理(CRT)
    • 二、欧拉定理
    • 三、RSA正常解密流程
    • 四、举例如下:


    前言

    使用中国剩余定理对RSA进行解密,可以提高RSA算法解密的速度。
    有关数论的一些基础知识可以参考以下文章: 密码学基础知识-数论(从入门到放弃)


    一、中国剩余定理(CRT)

    设p和q是不同的质数,且n = p*q。对于任意(X1, x2),其中 0 ≤ x1 < p 和 0 ≤ x2 < q,存在数x,其中 0 ≤ x < n。
    中国剩余定理给出了以下的一元线性同余方程组:

    x1 = x mod p
    x2 = x mod q

    因此,任何整数x (0 < x< n)都可以在其CRT表示(X1, X2)中唯一表示。

    二、欧拉定理

    欧拉定理是费马小定理的推广。或称为欧拉-费马定理。
    n是一个正整数,a是gcd(a, n) = 1的任意整数,则a^Φ(n) = 1 (mod n)。
    Φ(n)是欧拉函数,即不超过n,与n互素的正整数的个数。对于质数p, Φ § = p-1。

    三、RSA正常解密流程

    RSA算法流程可以参考以下文章: 公钥加密算法-RSA
    m = c^d mod n(d是私钥)
    为了保证安全性,要求算法中的p和q为512 bit以上长度的素数。在使用RSA算法对密文进行解密时,私钥指数d和模数n的位数一般比较大,计算起来比较困难。
    可以使用中国剩余定理和欧拉函数对其进行解密。

    根据中国剩余定理可以将 m = c^d mod n写成

    m1=c^d mod p
    m2=c^d mod q

    这个时候n的位数降低了。但是d的位数依旧很大。
    为了计算c^d mod p,我们可以使用欧拉定理来降低d的位数

    c ^ d mod p = c ^ ( d mod Φ ( p ) ) mod p = c ^ ( d mod (p-1) ) mod p

    上面式子证明如下:

    d = kφ( p ) + d mod φ( p )(或者d = k(p-1) + d mod ( p-1 ))其中k是一个整数。
    c ^ d = c ^( k φ ( p ) + d mod φ( p ) ) = (c ^ φ( p )) ^k * c ^ d mod φ( p )
    根据欧拉定理可以得到c ^ φ ( p ) = 1 (mod p)
    则c ^ d = 1^k * c ^ d mod φ( p ) = c ^ d mod φ( p ) ( mod p)

    同理可得:

    c ^ d mod q = c ^ ( d mod Φ ( q ) ) mod q = c ^ ( d mod (q-1) ) mod q

    令dP = d mod (p-1) = e^(-1)mod(p-1)
    dQ = d mod (q-1) = e^(-1)mod(p-1)
    m1 = c^dP mod p
    m2 = c^dQ mod q

    则RSA的求解过程如下所示:

    qInv = q ^ (-1) mod p
    h = qInv * ( m1-m2 ) mod p
    m = m2 + h*q (m为明文)

    最后的求解过程可以写成:

    S=CRT(m1,m2)=m2+((m1–m2)(q^(–1)modp) modp)⋅q

    上面写的有些乱,可以看下面的图片:
    使用中国剩余定理对RSA算法进行解密


    四、举例如下:

    使用中国剩余定理对以下例子进行解密
    在这里插入图片描述
    计算过程如下:
    在这里插入图片描述
    参考文章如下: Using the CRT with RSA

  • 相关阅读:
    JAVA计算机毕业设计在线辅导答疑系统Mybatis+源码+数据库+lw文档+系统+调试部署
    卡巴斯基plus(kaspersky plus) 21.16主界面出不来
    SQL常用语句大全
    星火模型(Spark)的langchain 实现
    自动补全、
    Mysql事务原理
    DIVFusion_ Darkness-free infrared and visible image fusion 论文解读
    mysql添加字段和调整字段顺序(图文详解)
    HTML5 常见的语义标记(布局)
    Java开发常见英语词汇汇总
  • 原文地址:https://blog.csdn.net/qq_43589852/article/details/127691919
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号