使用asn.1编码大整数时的奇数

时间:2012-10-12 13:32:40

标签: encoding asn.1

我在ASN.1中发现了许多对Integers编码要求的引用 并且整数本身就是签名对象

TLV 02 02 0123 for exmaple。

但是,我有一个256位整数(在证书中)编码 30 82 01 09 02 82 01 00 d1 a5 xx xx xx ... 02 03 010001

30开始 82 2字节长度 0109 265字节

02整数 82 2字节长度 0100 256字节 d1 a5 xxxx

d1是令人不安的部分,因为前导位是1,这意味着这个256位数是有符号的,实际上它是无符号数,一个公共rsa键。签名约束是否适用于整数> 64位?

谢谢,

3 个答案:

答案 0 :(得分:1)

BER / DER使用2s补码表示来编码整数值。这意味着第一位(非字节)确定数字是正数还是负数。这意味着有时需要添加额外的前导零字节以防止第一位将整数解释为负数。注意,前9位全为零是无效的BER / DER。

答案 1 :(得分:0)

是的,你是对的。对于任何非负DER / BER编码的INTEGER - 无论其长度如何 - 第一个有效负载字节的MSB为0.

生成此类密钥的程序不正确。

答案 2 :(得分:0)

“签名约束”(实际上是一条规则)完全适用于任何大小的整数。但是,根据域,您可能会发现域对象的编码方式存在各种奇怪之处。不幸的是,这是必须学习和解决的问题。