RSA 密码系统蒙哥马利模乘法的最终减法

2024-01-09

我对如何绕过模数的最终减法感到困惑radix-2 蒙哥马利模乘法 https://pdfs.semanticscholar.org/cbfd/5f286cf3a54025356cff90cd17ab083fafc1.pdf,当用于模幂算法时。下面两篇论文提出了绕过减法的条件。

  • 没有最终结果的蒙哥马利指数 减法:改进结果 https://link.springer.com/content/pdf/10.1007%2F3-540-44499-8_23.pdf
  • 蒙哥马利乘法不需要最后的 减法 http://colinandmargaret.co.uk/Research/CDW_ELL_99.pdf

我不完全理解“预处理和后处理”需要什么来消除蒙哥马利乘法末尾重复模数减法的需要。

读完上述论文后我的理解是,要消除最后的减法,你必须:

  1. 将每个输入操作数零扩展到模幂乘以 2

    e.g. new[2049 downto 0]  = (0, 0, old[2047 downto 0]) 
    
  2. 将蒙哥马利乘法内的循环界限增加两倍,以便再执行两次循环迭代

我已经对工作算法进行了这些修改,但是结果并不像我预期的那样,我不明白为什么。因此,我认为我误解了这些论文中的某些内容,或者遗漏了一个关键步骤。

让我们参考我的(工作中的)radix-2 蒙哥马利模幂函数(类似 C 的伪代码)。请注意,我已将操作数宽度扩展了两个最高有效的零数字(只是为了确保不会溢出)。它们过去只有 2048 位。

let NUM_BITS = 2048
let rsaSize_t be a 2050-bit vector type

// Montgomery multiplication: outData = XYr^(-1) modulo M,     
// where the radix r=2^n    (n=NUM_BITS) 
function montMult( rsaSize_t X,       // Multiplier
                   rsaSize_t Y,       // Multiplicand
                   rsaSize_t M,       // Modulus
                   rsaSize_t outData) // Result
{
    rsaSize_t S = 0;  // Running sum

    for (i=0; i<NUM_BITS; i++)
    {
        if (X.bit(i)==1) // Check ith bit of X
            S += Y;

        if (S.bit(0)==1) // check LSB of S
            S += M;

        S = S >> 1;   // Rightshift 1 bit
    }

    // HERE IS THE FINAL SUBTRACTION I WANT (NEED) TO AVOID
    if (S >= M)
    {
        S -= M;
    }

    outData = S.range(NUM_BITS-1,0);
}


//  montgomery modular exponentiation using square and multiply algorithm
//  computes  M^e modulo n, where we precompute the transformation of the 
//  base and running-partial sum into the montgomery domain 
function rsaModExp( rsaSize_t e,     // exponent 
                    rsaSize_t n,     // modulus
                    rsaSize_t Mbar,  // precomputed: montgomery residue of the base w.r.t. the radix--> (2^2048)*base mod n 
                    rsaSize_t xbar,  // precomputed: montgomery residue of 1  w.r.t. the radix--> 2^2048 mod n                 
                    rsaSize_t *out)  // result
{
    for (i=NUM_BITS-1; i>=0; i--)
    {
        montMult(xbar, xbar, n, xbar); // square
        if (e.bit(i)==1) 
            montMult(Mbar, xbar, n, xbar); // multiply
    }

    // undo montgomery transform
    montMult(xbar, 1, n, out);
}

我在报纸上漏掉了什么吗?我不认为这是一个实现错误,因为我的代码与论文中提出的完全匹配。我相信我可能是一个概念错误。任何和所有的帮助表示赞赏。

Thanks!


不确定您的非工作实施有什么问题(如果我理解得很好,您所展示的是一个工作实施)。为了使用 Walter 优化来计算M^e mod n,如果您的数字都适合 2048 位,您需要:

let NUM_BITS = 2050            // 2048 + 2
n < 2^(NUM_BITS - 2)           // precondition
M < 2 * n                      // precondition
let R = 2^(2 * NUM_BITS) mod n // pre-computed once for all
let M' = montMult(M, R, n)     // bring M in Montgomery form
let C' = montExp(M', e, n)     // Montgomery exponentiation
let C = montMult(C', 1, n)     // bring C' in normal form

最重要的: 不要忘记检查先决条件。

蒙哥马利乘法包括NUM_BITS(在你的情况下是2050)迭代(if-A-bit-set-add-B,if-odd-add-n,div-by-two),最低有效位在前,所有数字都表示在NUM_BITS(在你的例子中是2050)位。

蒙哥马利求幂还包括NUM_BITS(在你的情况下是2050)迭代(平方,if-e-bit-set-mult),最高有效位在前,所有数字都表示在NUM_BITS(在你的例子中是2050)位。希望能帮助到你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RSA 密码系统蒙哥马利模乘法的最终减法 的相关文章

  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win
  • 由于 play-services-base-17.1.0.aar 转换错误,无法构建项目

    所以基本上我已经快一年没有打开我的 Android Studio 项目了 这次是打开和构建它的时候了 更新 Android Studio 和项目的所有插件后 我终于遇到了这个错误 Execution failed for task app
  • ListItem 附加自定义值

    我在asp net中使用dropdownlist 它有代表下拉列表项目的ListItem集合 每个ListItem只有两个字段来保存数据 Value和Text字段 但这些还不够 我想保存更多数据对于每个项目 假设附加字段中有 Text1 和
  • java8 Collectors.toMap() 限制?

    我正在尝试使用java8Collectors toMap on a Stream of ZipEntry 这可能不是最好的想法 因为在处理过程中可能会发生异常 但我想这应该是可能的 我现在收到一个我不明白的编译错误 我猜是类型推理引擎 这是
  • Excel 2013 数据透视表不会更改当前页面,除非手动导航到

    我们有一小段 VBA 代码 多年来一直完美运行 本质上是 Me PivotTables APivot PivotFields AField CurrentPage Some text 这种方法一直有效 直到 Excel 2013 该行将失败
  • 将带有星号的注册表项传递给测试路径

    我想通过以下方式运行此注册表路径Test Path在 PowerShell 中 但它包含一个星号 该星号在注册表中有效 但在 Windows 路径中无效 问题是 当我通过它时 Test Path将星号视为通配符 因此这需要非常非常长的时间
  • 如何从 Magento One Page Checkout 获取发布数据?

    为了在 Magento Checkout 中添加客户评论字段 我在相应的模板文件中添加了一个文本字段 并使用如下观察器将评论添加到订单中 comment strip tags Mage app gt getRequest gt getPar
  • 多边形内的 SQL 地理点在 STIntersect 上不返回 true(但使用 Geometry 返回 true)

    我不想仅仅为了在 STIntersect 中返回 true 而将地理数据转换为几何图形 下面是 SQL 中的代码 DECLARE point GEOGRAPHY GEOGRAPHY Point 1 1 4326 DECLARE polygo
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia
  • 如何获得 JavaScript 阶乘程序的循环来显示所使用的工作?

    你好 我面临着用 JavaScript 编写一个程序的挑战 尽管我对它不太了解 但它要求用户输入一个数字 然后计算该数字的阶乘 我使用了已经提出的问题并设法使计算正常工作 但无法获得所需的输出 我必须在以下输出中获取它 而不使用任何花哨的库
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item
  • Swagger/Openapi-Annotations:如何使用 $ref 生成 allOf?

    我正在生成 Rest 端点 包括添加OpenAPI Swagger对生成的代码进行注释 虽然它对于基本类型运行得很好 但我在自定义类方面遇到了一些问题 现在我有很多自定义类的重复架构条目 使用 Schema 实现 MyClass class
  • 我可以将 MongoDB 与实体框架一起使用吗?

    实体框架有可能支持MongoDB数据库吗 有人写过实体框架MongoDB Provider吗 简短的回答 不 这肯定是可能的 但不合理 MongoDB 是文档数据库 不支持集合之间的任何物理关系 EF 非常适合 SQL MySQL 等关系数
  • Biopython 可以执行 Seq.find() 来解释歧义代码吗

    我希望能够在 Seq 对象中搜索考虑歧义代码的子序列 Seq 对象 例如 以下内容应该是正确的 from Bio Seq import Seq from Bio Alphabet IUPAC import IUPACAmbiguousDNA
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航
  • 使用适用于 Android 和 ios 的 Angular NativeScript 的透明选项卡栏和操作栏

    我想让标签栏透明 操作栏在滑动布局或页面上透明 操作栏或选项卡栏必须位于页面顶部 就像两层一样 我尝试过使用 css 使其透明 但它在页面上并没有变得透明
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保
  • 使用 IIS 发布:找不到服务器 DNS

    我正在尝试使用 IIS 发布我的项目 我能够通过 Visual Studio 发布它 La aplicaci n web se public correctamente file D www plataformafantasy com Co
  • 在 Google 地图上绘制线条/路径

    我很长一段时间都在忙于寻找如何在 HelloMapView 中的地图上的两个 GPS 点之间画一条线 但没有运气 谁能告诉我该怎么做 假设我使用扩展 MapView 的 HelloMapView 我需要使用叠加层吗 如果是这样 我是否必须重
  • 窗口未定义 - Next.js 13 - 服务器组件中的客户端组件 - [重复]

    这个问题在这里已经有答案了 Leaflet 被导入到一个导入到客户端组件的文件中 那么为什么服务器运行它并抛出此错误呢 它实际上在重试后确实有效 并最终使网站正常运行 我尝试在内部使用动态导入useEffect 没有骰子 Reference

随机推荐

  • 枚举 Windows 纸张尺寸

    我可以使用获取当前区域设置纸张大小 GetLocaleStr LCID LOCALE IPAPERSIZE IntToStr DMPAPER A4 where LOCALE IPAPERSIZE 100A 但有没有办法枚举所有纸张尺寸及其名
  • 连接 SQL 查询中一个字段的多个结果

    我不确定这是否可以通过 SQL 查询实现 但我会尝试一下 我正在用 C 开发一个 SharePoint Web 部件 它连接到 SQL 数据库并运行查询 然后将该结果集数据绑定到网格视图 它工作正常 但我有一个小障碍 在大多数情况下 我的查
  • http 标头中是否允许存在多个线性空白

    我试图理解http www w3 org Protocols rfc2616 rfc2616 sec2 html sec2 2 http www w3 org Protocols rfc2616 rfc2616 sec2 html sec2
  • 使用 boost:asio 和 select?阻塞 TCP 输入或文件更新

    我原本打算在程序中设置一个线程 该线程将等待两个文件描述符 一个用于套接字 第二个用于描述文件系统的 FD 特别是等待查看是否将新文件添加到目录中 由于我预计很少会看到添加的新文件或传入的新 TCP 消息 因此我希望有一个线程等待任一输入并
  • 如何使用 Gradle 构建 Google protocol buffers 和 Kotlin?

    我正在尝试使用 Gradle 构建一个同时使用 Google 协议缓冲区和 Kotlin 的项目 我希望将 proto 文件编译为 Java 源代码 然后从我的 Kotlin 代码中调用该源代码 我的源文件是这样排列的 src main p
  • 使用 SearchView 过滤 RecyclerView 的 LiveData 内容列表

    我创建了 RecyclerView 其中包含简单的单词列表 GroupVc 对象的字符串名称 由于列表可能很长 我想使用工具栏中的 SearchView 对其进行过滤 我的应用程序的架构基于 Android 架构组件 其中所有 GroupV
  • 如何将一个输入框中的值传递到另一个输入框

    我正在尝试在框之间传递值 因此 当用户在第一个文本框中键入时
  • 根据另一个数组的顺序对数组进行有效排序

    假设我有这个 struct Pet let name String let pets Pet name Z Pet name F Pet name A Pet name E let petNames E F Z A 我的预期输出是 Pet
  • 使用 requireJS 优化器时,buildlayered javascript 有什么优势?

    我正在尝试我的第一次尝试requireJs optimizer r js here http requirejs org docs optimization html 准备生产申请 我可以让一切正常工作 并且可以将我的所有 js 丑化为一个
  • React Navigation:使用 this.props.navigation.state.params 接收“未定义”

    当我将道具传递到另一个屏幕时 我遇到了一个奇怪的问题 我传递两个参数 title and body 转到文章正文屏幕 class ListButtonWrapper extends React Component constructor p
  • 如何列出可用的泡沫工厂类型

    简而言之 我试图弄清楚是否有一种方法可以在加载 WSDL 后列出可用于调用 Client factory create 的所有类型 我有一个复杂类型的参数 其中包含另一个复杂类型的数组 suds 工厂似乎不知道如何创建属于数组的类型 所以我
  • PHP 的 glob() 可以以不区分大小写的方式查找文件吗?

    我希望所有 CSV 文件都在一个目录中 所以我使用 glob my dir CSV 但是 这不会找到具有小写 CSV 扩展名的文件 I could use glob my dir CSV csv GLOB BRACE 但是有没有办法允许所有
  • Xcode6中如何获取设备控制台?

    我正在探索 iOS8 测试版 我在 窗口 gt 设备 gt MyiPad 中找不到设备控制台日志 有人可以告诉我如何获取控制台日志吗 你走在正确的道路上 只需单击向下的小箭头 参见图片 它就会向您显示日志
  • chrome 视频 src 更改不起作用

    我使用以下代码来更改视频src视频结束后的属性 我预加载第二个视频 我更改 src 以链接到第二个视频 In IE and Firefox这很好用but在Chome 27 X X视频元素 改变后似乎死了src 奇怪的是 如果我使用断点来单步
  • 在 java 中禁用 XML DOM 解析器的自动解码

    这是我的程序 public class XMLTest static String XMLdata section section
  • 将字符串转换为日期时类型不匹配

    发现问题 日期语言为俄语 但下一个问题是 如何根据特定用户的日期格式转换日期字符串 可能是简单的问题 把我的头撞到墙上 我的 txt 文件中有日期 它被读取为 21 年 9 月 1 日 VBA 中将其用作日期的任何操作都会导致类型不匹配 D
  • 使用 Visual Studio Code 进行调试不起作用

    我希望能够使用 Visual Studio Code 调试 Angular2 应用程序 这是我的环境 OS Ubuntu 16 10 x64 Browser Chromium53 0 2785 143 Node 6 8 0 Angular
  • cUrl 设置语言标头

    如何为我的 cURL 请求设置语言标头 例如现在我得到了 facebook com 的荷兰语主页 可能是因为我的服务器位于荷兰 通过标头发送的默认语言 在这种情况下 我更喜欢英语而不是荷兰语 所以我尝试在curl中设置一个httpheade
  • php 函数将 %3c 转换回 html

    我有一个字符串需要转换回 html 它的格式如下 3cli 3e 这应该是 li 我可以使用什么 php 函数来转换它 尝试了 html entity decode 但这不起作用 urldecode http www php net man
  • RSA 密码系统蒙哥马利模乘法的最终减法

    我对如何绕过模数的最终减法感到困惑radix 2 蒙哥马利模乘法 https pdfs semanticscholar org cbfd 5f286cf3a54025356cff90cd17ab083fafc1 pdf 当用于模幂算法时 下