无需动态分配的RSA实现

2024-05-07

典型的 RSA 实现包含一个多精度整数库。典型的多精度整数库使用动态分配将大整数表示为大小合适的机器字数组。

我预计当使用多精度整数仅使用 RSA-2048 来加密或解密已知长度的消息(通常是对称加密密钥)时,可能会遇到数学整数的限制,并且它将是可以通过静态地或在堆栈上为所有必要的中间结果分配空间来实现该算法。

I found 这个论坛主题 https://polarssl.org/discussions/generic/arm-cortex-m3-lm3s6965-rsa-implementation表明这是可能的。它不指示最大整数大小。也许这是显而易见的(“所有整数都需要 2048 位,呃!”)。无论如何,我会对现有的实现更感兴趣(如果有的话)。

作为一个不值得单独讨论的附带问题,椭圆曲线密码学的典型实现是否需要动态分配?


是否可以实现不动态分配的多精度整数类

Yes.

我知道类似的实现C# BigInteger 类 http://www.codeproject.com/Articles/2728/C-BigInteger-Class。 (并且不管底层 clr 运行时做了什么)。

我不知道 C/C++ 中有任何静态大小的缓冲区。但我只熟悉Botan、Crypto++和OpenSSL。

从我所看到的实现来看,公共指数e有时会得到优化,使其成为int or long. But n and d是多精度的。 (我想看看有一天它会如何爆发)。

最后,路由器和其他低功率设备经常对发送和接收缓冲区进行这种优化(我曾经与一位电气工程师和设计路由器的人一起工作)。它们只是保留一块内存,软件使用索引来访问静态缓冲区。所以不难相信他们已经采取了你所说的优化。


RSA-2048,并且可以通过静态或在堆栈上为所有必要的中间结果分配空间来实现该算法。

是的,如果您接受限制最大 RSA 模数大小或 EC 素数字段大小,则可以使用固定大小缓冲区的符号幅度方案来实现这一点。

RSA 公钥是 (e,n)。尽管有小警告e的,您将需要两个 2048/8 = 256 字节或八位字节的缓冲区。

没有预计算技巧的 RSA 私钥很简单 (e,d,n)。因此,您需要三个 256 字节或八位位组的缓冲区。

如果您正在使用 12 位字节的 PDP-8,那么您将需要更少的字节。


它不指示最大整数大小。

细节中的魔鬼可能是乘法。因此,您需要一个暂存缓冲区来执行乘法。这意味着您将需要一个 ~2*2048 位大小的缓冲区(乘以 2m大小的缓冲区创建大小的结果2m -1 )。然后乘法的结果必须减少。它们可能是进一步的优化,但我通常不关心这些细节。

相关,最大消息大小和最大密文大小有关n。在 Crpyto++ 中,可以使用以下命令检索它们MaxPreImageSize(对于纯文本)和MaxImageSize(对于密文)。MaxPreImageSize and MaxImageSize return n - 1.


作为一个不值得单独讨论的附带问题,椭圆曲线密码学的典型实现是否需要动态分配?

这取决于底层的实现。素数域上的曲线由域参数定义(来自 Certicom 的SEC1,椭圆曲线域参数 http://www.secg.org/collateral/sec1_final.pdf,第 3 节,第 16 页):

Elliptic curve domain parameters over F_p are a sextuple:

   T = (p, a, b, G, n, h)
  • p是一个大素数并且需要一个多精度整数

  • a and b是定义曲线的系数。通常是“小”(例如,a= 3),但它们可能需要非标准曲线的多精度整数。例如DJB的ed25519曲线是y^2 = x^3 - 102314837768112 x + 398341948620716521344.

  • G是基点,所以它实际上是曲线上的一个元素(或点)。这意味着 是 (X, Y) 坐标,并且可能需要多精度整数。

  • n是一个素数G这意味着它几乎和n

  • h是辅助因子,通常非常小:4 或 2,或 1。

当您为曲线创建密钥对时,您需要一个随机的私有指数d (or x),并在求幂后创建一个元素(曲线上的点)。即公钥(X,Y)=G^x。所以你还有三个多精度整数。

二进制字段上的曲线需要一种表达多项式的方法。所以你可能仍然需要多精度整数(用于p在素数场)。

因此,椭圆曲线上的大多数“事物”都需要多精度整数。

您可以在以下位置查看域参数的示例:椭圆曲线密码学 (ECC) Brainpool 标准曲线和曲线生成 https://www.rfc-editor.org/rfc/rfc5639#page-8.

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

无需动态分配的RSA实现 的相关文章

  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 获取 TextBox 中的文本行数

    我试图通过标签显示文本框中的文本行数 但是 问题是如果最后一行为空 标签必须显示没有空行的行号 例如 如果它们有 5 行 最后一行为空 则标签应将行数显示为 4 Thanks private void txt CurrentVinFilte
  • 套接字编程-listen() 和accept() 有什么区别?

    我一直在读本教程 http www cs rpi edu moorthy Courses os98 Pgms socket html了解套接字编程 看来listen and accept 系统调用都做同样的事情 即阻塞并等待客户端连接到使用
  • 使用 GCHandle 将大型结构数组从 C# unity 脚本传递到 C++ dll 在 C++ 函数执行后崩溃

    我想从 C unity 脚本将结构数组传递给 c 本机插件 我做了如下操作 我可以访问数据 但我的应用程序在执行 c 函数后崩溃 我不知道为什么 C side StructLayout LayoutKind Sequential publi
  • 何时使用 C++ 私有继承而不是组合?

    你能给我一个具体的例子吗 什么时候使用私有继承优于组合 就我个人而言 我将使用组合而不是私有继承 但在某些情况下 使用私有继承可能是特定问题的最佳解决方案 正在阅读C faq http www parashift com c faq lit
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • 应用新设置时如何防止 GraphicsDevice 被丢弃?

    我的游戏窗口允许手动调整大小 这意味着它可以像任何其他普通窗口一样通过拖动其边缘来调整大小 游戏还利用了RenderTarget2D rt2d 在主 Draw 方法中设置主渲染目标 GraphicsDevice SetRenderTarge
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 如果项目包含多个文件夹,如何使用 Add-Migration

    我想Add Migration使用我的 DbContext 但出现错误 The term add migration is not recognized as the name of a cmdlet function script fil
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • XCode std::thread C++

    对于学校的一个小项目 我需要创建一个简单的客户端 服务器结构 它将在路由器上运行 使用 openWRT 并且我试图在这个应用程序中使用线程做一些事情 我的 C 技能非常有限 所以我在internet https stackoverflow
  • 检查另一种形式的线程是否仍在运行

    我有一个涉及两个窗体的 Windows 窗体应用程序 子表单用于将数据导出到 CSV 文件 并使用后台工作者写入文件 当这种情况发生时 我隐藏了表格 当后台工作程序运行时 父窗体仍然处于活动状态 因此即使后台工作程序正在写入文件 用户也可以
  • 包含从代码隐藏 (ASP.NET C#) 到 ASPX 中的图像概述的图像列表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Web API 2.0 使用 pascalcase 模型接收驼峰式命名的 JSON 数据

    我正在尝试对我的 Web API 进行 PUT 调用 我在 WebApiConfig cs 中设置了以下内容 以处理以驼峰形式将数据发送回我的 Web 项目 config Formatters JsonFormatter Serialize
  • C# 和断点 - 这里有魔术师吗?

    我有这个 public static void ByLinkText string text for var i 0 i lt 50 i try Setup Driver FindElement By LinkText text Click

随机推荐