uname -a
将其标识为: :QNX mmx 6.5.0 2012/06/20-13:49:13EDT nVidia_Tegra2(T20)_Devlite_Boards armle
这看起来像是RSA加密,用于确定文件内容是否已更改。我认为这是文件特定部分的哈希值: >
[Signature]
signature1 = "a73e111de512e09bad2dc08eff685a38"
signature2 = "4fc032192a20fd1e242ad64af5b509a7"
signature3 = "6a7432f754aff0d6b74a7ec2072cbb11"
signature4 = "e91f68f569508b77712d1869edd6d0b9"
signature5 = "923eb77ba815dba8e44d5e09412cdf2e"
signature6 = "830518f3b38d48df892a3a0c65cc67f1"
signature7 = "09e5e0f5f06ce0376d032ab21051510f"
signature8 = "3dab7f75fcdf54a96d8aa7f3c617f76d"
我的目标是能够更改
metainfo2.txt
,一种可能的方法是用新密钥替换公钥,但是我需要了解如何使用签名部分验证文件内容。我正在寻找有关如何实现此目标的答案或指示... #1 楼
你的预感是正确的。在签名域追加所有的号码,你得到的数量S = 0xa73e111de512e09bad2dc08eff685a384fc032192a20fd1e242ad64af5b509a76a7432f754aff0d6b74a7ec2072cbb11e91f68f569508b77712d1869edd6d0b9923eb77ba815dba8e44d5e09412cdf2e830518f3b38d48df892a3a0c65cc67f109e5e0f5f06ce0376d032ab21051510f3dab7f75fcdf54a96d8aa7f3c617f76d
这是太大,无法与
一模数n = 0x830ACD6556FC2FB47B1B674312E34E7A0AAD1EDFBA7EB279D9513ADB10166148131BBA9C852AB701914916656294616BB1A9B8F8462EBC206DE57F53AFEF000053AB8E4F6329BF00B0ED45E8E920678EF67AF8BCCB7B4DCF880159BBCBF1B104D4A1C05770AAD738E8BD9A284E94995CB79649285AC4049C6B578FC54F746AC9
所以我们将使用
N = 0xC0F389EEC7B66C9DC736508FF88AEB1FB113942EAD020814D08D29E868F14B2086BCD7DDCCBA7559F999E76D24619660BBE17434DA59988087F2A99CD465B1FF423522B78CB0DE463A669613D356DFA9E86E0E2E0B6DAB5DE89131C5A0727AEAB1767278AB101DCD9C3CFC1026705C1DAB3BF53BF50AFAFB3F52DA2CEB0BEE57
的TA模量王签名S升高到3个模量的n次幂,我们风与下面的值
0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff003021300906052b0e03021a050004145e3246e50a4dad079a61f99fa3297c01d802e038
这是一个标准签名格式。 0x1ffff ... 00正在填充。 3021 ...是ASN.1编码的结构。
使用OpenSSL解析
openssl.exe asn1parse -inform DER -dump -i
0:d=0 hl=2 l= 33 cons: SEQUENCE 2:d=1 hl=2 l= 9 cons: SEQUENCE 4:d=2 hl=2 l= 5 prim: OBJECT :sha1 11:d=2 hl=2 l= 0 prim: NULL 13:d=1 hl=2 l= 20 prim: OCTET STRING 0000 - 5e 32 46 e5 0a 4d ad 07-9a 61 f9 9f a3 29 7c 01 ^2F..M...a...)|. 0010 - d8 02 e0 38 ...8
我们知道签名是基于SHA1哈希值的。要更改由这些密钥签名的数据,您需要生成自己的1024位RSA密钥,将c0 ...密钥替换为您自己的公共密钥,更改数据,替换上面数据中的哈希,然后使用您的私钥。
#2 楼
如您所知,MetafileChecksum = "ec5afd6459c3579ebed8841cc41fe17bb61b814d"
是初始metainfo2.txt
文件的SHA1哈希,然后添加MetafileChecksum
行和最终[Signature]
块。 RSA公钥/私钥模数(n = C0 F3 .. EE 57
)。当与文件的后32个字节中的公共指数(e = 00 00 .. 00 03
)结合使用时,会产生RSA公共密钥(n, e)
。将其应用于[Signature]
块中的数据可得到:在添加5e3246e50a4dad079a61f99fa3297c01d802e038
之后,但在附加metainfo2.txt
块之前,将发现MetafileChecksum
的SHA1哈希值。 )在密钥文件中代表什么?好吧,如果使用相同的公钥解密这些文件,则会得到:1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffff003021300906052b0e03021a050004145e3246e50a4dad079a61f99fa3297c01d802e038
再次获得一个包含SHA1哈希
[Signature]
的ASN.1签名结构。而且您会发现这是包含公用密钥(n,e)的密钥文件的前128 + 32 = 160字节的SHA1。不幸的是,这些都无法使我们接近签署c9b809bea9c9d13a87f7ef2212d9d03281da7020
文件,因为我们不知道私钥指数(d)。但是,如果要用自己的密钥替换密钥,至少现在您知道如何完全填充metainfo2.txt
文件,以及如何使用自己的私钥对MetainfoKey
签名。评论
是的,我得出了相同的结论
–雷姆科
17年9月25日在15:15
#3 楼
经过研究后,我得出结论,我们不能简单地更改键。在我们的例子中,它恰好是公钥,但是我们不能更改它。您无法使用自己的按键的闪存芯片,因此值得您付出以下努力:)
注意事项。
评论
非常感谢Peter!下一步,我试图了解设备如何验证签名并验证签名的哈希确实是MetafileChecksum。有关如何执行此操作的任何提示?
–雷姆科
16 Mar 24 '16 at 8:32
MetafileChecksum可能只是某些文件的SHA1哈希。我会尝试SHA1候选文件,直到您找到匹配项。希望你能走运。
–彼得·安德森(Peter Andersson)
16 Mar 24 '16 at 8:34
是的,我知道如何计算MetafileChecksum,它是文件本身的sha1,不包括签名部分和MetafileChecksum行。我不了解(可能由于缺乏rsa知识)如何使用公钥解密MetafileChecksum以获取与MetafileChecksum相同的值。工作完成后,我可以尝试替换公共密钥。
–雷姆科
16年3月24日在8:37
您实际上不需要解密MetafileChecksum。这是一个哈希,因此无法进行解密。只需修改文件中需要修改的部分,重新计算SHA1并更新MetafileChecksum。您需要找到散列为5e 32 ... e0 38的数据。因为那是签名块保护的数据。
–彼得·安德森(Peter Andersson)
16-3-24在8:40