- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
典型的 RSA 实现包含一个多精度整数库。典型的多精度整数库使用动态分配将大整数表示为大小恰到好处的机器字数组。
我预计当使用多精度整数仅使用 RSA-2048 加密或解密已知长度的消息(通常是对称加密 key )时,可能会遇到数学整数的界限,并且可以通过静态地或在堆栈上为所有必要的中间结果分配空间来实现该算法。
我找到了 this forum thread暗示这是可能的。它不表示最大整数大小。也许这是显而易见的(“所有整数都需要 2048 位,呃!”)。无论如何,如果有的话,我会对已经存在的实现更感兴趣。
作为一个不值得单独输入的附带问题,椭圆曲线密码术的典型实现是否需要动态分配?
最佳答案
Is it possible to implement a multi-precision integer class without dynamic allocation
是的。
我知道 C# BigInteger Class 中有类似的实现. (并且不考虑底层 clr 运行时的作用)。
我不知道 C/C++ 中有任何静态大小的缓冲区。但我只熟悉 Botan、Crypto++ 和 OpenSSL。
根据我所见的实现,公共(public)指数 e
有时会得到优化,使其成为 int
或 long
。但是 n
和 d
是多精度的。 (我想看看有一天会怎样)。
最后,路由器和其他低功率设备通常会在发送和接收缓冲区上进行这种优化(我曾经和一个设计路由器的电气工程师一起工作)。它们只是保留一 block 内存,软件使用索引来访问静态缓冲区。因此,不难相信他们已经采用了您所说的优化。
RSA-2048, and that it would be possible to implement the algorithm by allocating space for all necessary intermediate results either statically or on the stack.
是的,如果您同意限制最大 RSA 模数大小或 EC 素数字段大小,您可以使用固定大小缓冲区的符号幅度方案来做到这一点。
RSA 公钥是 (e,n)。尽管有关于小 e
的警告,您仍需要两个 2048/8 = 256 字节或八位字节的缓冲区。
没有预计算技巧的 RSA 私钥就是 (e,d,n)。因此,您需要三个 256 字节或八位字节的缓冲区。
如果您在使用 12 位字节的 PDP-8 上工作,那么您将需要更少的字节。
It does not indicate maximum integer sizes.
细节中的魔鬼可能是乘法。所以你需要一个临时缓冲区来执行乘法。这意味着您将需要一个 ~2*2048 位大小的缓冲区(乘以 2 个 m
大小的缓冲区会创建大小为 2m -1
的结果)。然后必须减少乘法的结果。它们可能是进一步的优化,但我通常不关心这些细节。
相关,最大消息大小和最大密文大小与n
有关。在 Crpyto++ 中,可以使用 MaxPreImageSize
(对于纯文本)和 MaxImageSize
(对于密文)检索它们。 MaxPreImageSize
和 MaxImageSize
返回 n - 1
。
As a side-question that does not deserve its own entry, do typical implementations of elliptic curve cryptography require dynamic allocation?
这取决于底层实现。素数场上的曲线由域参数定义(来自 Certicom 的 SEC1, Elliptic Curve Domain Parameters,第 3 节,第 16 页):
Elliptic curve domain parameters over F_p are a sextuple:
T = (p, a, b, G, n, h)
p
是一个大素数,需要多精度整数
a
和 b
是定义曲线的系数。通常是“小”(例如,a
= 3),但它们可能需要非标准曲线的多精度整数。例如,DJB 的 ed25519 曲线是 y^2 = x^3 - 102314837768112 x + 398341948620716521344
。
G
是基点,所以它实际上是曲线上的一个元素(或点)。这意味着是一个 (X, Y) 坐标,可能需要多精度整数。
n
是 G
阶质数,这意味着它的大小与 n
h
是辅助因子,通常很小:4 或 2,或 1。
当您为曲线创建 key 对时,您需要一个随机私有(private)指数 d
(或 x
),这会创建一个元素(曲线上的点)求幂后。即公钥 (X, Y) = G^x
。所以你还有三个多精度整数。
二进制文件上的曲线需要一种表示多项式的方法。所以您可能仍然需要多精度整数(用于素数字段中的 p
)。
因此,椭圆曲线上的大多数“事物”都需要多精度整数。
您可以在例如 Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation 查看域参数的示例。 .
关于c - 没有动态分配的RSA的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653528/
我有一个应用程序,它会抛出 GKSession 并在各种条件下(连接超时、 session 失败等)创建一个新的 GKSession。不过,我遇到了内存泄漏问题,并且有时会在重新连接几次循环后崩溃。
比如我在宿主代码中有一个浮点指针 float *p 是否可以确定他指向的内存类型(设备/主机)? 最佳答案 在 UVA system 中, 运行时 API 函数 cudaPointerGetAttri
我已将项目转换为 .Net 4.0 并且以下代码不起作用: typeof(RuntimeTypeHandle).GetMethod("Allocate", BindingFlags.Instance
当我声明 char ch = 'ab' 时,ch 只包含 'b',为什么它不存储 'a'? #include int main() { char ch = 'ab'; printf("%c"
我对 Disk Sector 和 Block 有疑问。扇区是一个单位,通常为 512 字节或 1k、2k、4k 等取决于硬件。文件系统 block 大小是一组扇区大小。 假设我正在存储一个 5KB 的
假设我有 8 个人和5000 个苹果。 我想将所有苹果分发给所有 8 个人,这样我就没有苹果了。 但每个人都应该得到不同数量 将它们全部分发出去的最佳方式是什么? 我是这样开始的: let peopl
我正在构建的网站顶部有一个搜索栏。与 Trello 或 Gmail 类似,我希望当用户按下“/”键时,他们的焦点就会转到该搜索框。 我的 JavaScript 看起来像这样: document.onk
我有一小段代码: if (PZ_APP.dom.isAnyDomElement($textInputs)){ $textInputs.on("focus", function(){
我观察到以下行为。 接受了两个属性变量。 @property (nonatomic, retain) NSString *stringOne; @property (nonatomic, assign
我正在解决这样的问题 - 实现一个计算由以下内容组成的表达式的函数以下操作数:“(”、“)”、“+”、“-”、“*”、“/”。中的每个数字表达式可能很大(与由字符串表示的一样大)1000 位)。 “/
我有一组主机和一组任务。 每个主机都有 cpu、mem 和任务容量,每个任务都有 cpu、mem 要求。 每个主机都属于一个延迟类别,并且可以与具有特定延迟值的其他主机通信。 每个任务可能需要以等于或
该程序的作用:从文件中读取一个包含 nrRows 行和 nrColomns 列的矩阵(二维数组)。矩阵的所有元素都是 [0,100) 之间的整数。程序必须重新排列矩阵内的所有元素,使每个元素等于其所在
世界!我有个问题。今天我尝试创建一个代码,它可以找到加泰罗尼亚语号码。但是在我的程序中可以是长数字。我找到了分子和分母。但我不能分割长数字!此外,只有标准库必须在此程序中使用。请帮帮我。这是我的代码
我确定我遗漏了一些明显的东西,但我想在 Objective C 中创建一个 NSInteger 指针的实例。 -(NSInteger*) getIntegerPointer{ NSInteger
这个问题在这里已经有了答案: Difference between self.ivar and ivar? (4 个答案) 关闭 9 年前。
我如何将 v[i] 分配给一系列整数(v 的类型是 vector )而无需最初填充 最佳答案 你的意思是将 std::vector 初始化为一系列整数? int i[] = {1, 2, 3, 4,
我想寻求分配方面的帮助....我把这个作业带到了学校......我必须编写程序来加载一个 G 矩阵和第二个 G 矩阵,并搜索第二个 G 矩阵以获取存在数第一个 G 矩阵的......但是,当我尝试运行
我必须管理资源。它基本上是一个唯一的编号,用于标识交换机中的第 2 层连接。可以有 16k 个这样的连接,因此每次用户希望配置连接时,他/她都需要分配一个唯一索引。同样,当用户希望删除连接时,资源(号
是否有任何通用的命名约定来区分已分配和未分配的字符串?我正在寻找的是希望类似于 us/s 来自 Making Wrong Code Look Wrong ,但我宁愿使用常见的东西也不愿自己动手。 最佳
我需要读取一个 .txt 文件并将文件中的每个单词分配到一个结构中,该结构从结构 vector 指向。我将在下面更好地解释。 感谢您的帮助。 我的程序只分配文件的第一个字... 我知道问题出在函数 i
我是一名优秀的程序员,十分优秀!