2012-06-29 6 views
6

私は最終的にいくつかの簡単なPGP署名付きメッセージブロックを検証することができました。しかし、何らかの理由で、私の実装が9〜16バイトのデータの検証に制限されることを発見しました。劣らず。もういや。PGPのハッシュするデータの長さ

任意の長さの平文データの処理方法を指定する何らかの指示がありますか(RFC4880など)?多分私は逃したいくつかの並べ替えがありますか? pkcs1?

RFC 4880 sec 5.2.4の説明では、テキスト文書の場合、\nをすべて\r\nに置き換え、予告編を追加しているため、正しくハッシュするようにデータをフォーマットしていることは間違いありません。働いていない

// DSA public key values 
p = 175466718616740411615640156350265486163809613514213656685227237159351776260193236923030228927905671867677337184318134702903960237546408302010360724274436019639502405323187799029742776686067449287558904042137172927936686590837020160292525250748155580652384740664931255981772117478967314777932252547256795892071 
q = 809260232002608708872165272150356204306578772713 
g = 127751900783328740354741342100721884490035793278553520238434722215554870393020469115393573782393994875216405838455564598493958342322790638050051759023658096740912555025710033120777570527002197424160086000659457154926758682221072408093235236853997248304424303705425567765059722098677806247252106481642577996274 
y = 1729359689660729090363046649964245002413818785374443321465729582030837456094002908141174514805122689

-----BEGIN PGP SIGNED MESSAGE----- 
Hash: SHA1 

abcd 
-----BEGIN PGP SIGNATURE----- 
Version: BCPG v1.39 

iFsEARECABsFAk/tB28UHGFiYyA8bWFrY21AYWFhLmNvbT4ACgkQMFIlRc933Ya2 
RwCfdMyI08Iz0rDXVHOPlGA3s5Y9j/8An2He7+hHjWfGJNoOJT7gAxqJaoLo 
=I2rT 
-----END PGP SIGNATURE----- 

data hashed (in hex): 6162636404011102001b05024fed076f141c616263203c6d616b636d406161612e636f6d3e04ff00000021 

r = 666804200764671083282351405489424949903645052927 
s = 558743769080942454889260816818443017172325925608 

w = 702955297882281869313155599553522395227576660460 // s^-1 mod q 
u1 = 190417717173929082607343542521304347388874234334 
u2 = 306786785479358548892951170619047936651163362761 
v = g^u1 * y^u2 % p % q = 737052148656331043521702886300418501784667890334 

v != r 

作業を私のテスト値は、データの単一の行があったため、何もベース10に特記されていない限り、

これらの値のすべて

を交換しなければなかったです。

-----BEGIN PGP SIGNED MESSAGE----- 
Hash: SHA1 

abcdef 
-----BEGIN PGP SIGNATURE----- 
Version: BCPG v1.39 

iFsEARECABsFAk/tCE0UHGFiYyA8bWFrY21AYWFhLmNvbT4ACgkQMFIlRc933YYG 
IQCfercgPsXFnah6otgQdEMbv9OeCgIAnRIyOLirbqSlBugBT6Ex/Adz4+7L 
=bzab 
-----END PGP SIGNATURE----- 

data hashed (in hex): 3031323334353637383961626364656604011102001b05024fed084d141c616263203c6d616b636d406161612e636f6d3e04ff00000021 

r = 700580719365380086754774917458461236187098909186 
s = 103881812262595813943381509986903840453887782603 

w = 178510125628083028184051840492924307896586330444 // s^-1 mod q 
u1 = 78831508775508876446567239486098677466912246622 
u2 = 572875590470993668032596348682349224460207395691 
v = g^u1 * y^u2 % p % q = 700580719365380086754774917458461236187098909186 

v == r 

どのデータがハッシュに含まれていませんでしたか?何が間違っていましたか?

編集:ここ

-----BEGIN PGP PUBLIC KEY BLOCK----- 
Version: BCPG v1.39 

mQGiBE5B0h8RBAD533Z5bK1IpBx02QyQL0QoJE4uFRIMGDiwXuwmZzVl+R7Vlurd 
GRLsCCbE6vOOh7XQVZGzLEBy9WNzZ9m+EbCfSVAYkjS6FhLws6hG6irrnS+b3JBf 
gFJ8vNGF9Z7bhx+7y7NBk0IMyWkGnUkcnav73t5FQUI2faEBN4c/yAGJZwCgjcB7 
3akWk9XVWvTCsiMXxpyvkukEALXsvB6cOoFEtQq9cQHjP63fBlvD94dhhMiM0cH6 
hW9JotxdK+cxFGG9ZIWgoN2PWbMJka/H4W5EL6tS+YiNAR7I1Ozkt6X16GjnQUzZ 
MlSpleK+KiKVN2anRaPEoOIinHrE3ZXd6QlJ/4+OJn4IVWmSEaJpFf4QNgvEu4rh 
xinyBAD2RNzREOA+wpnFZ4lDt9NZXmXdxQME/l0J9XcvWhpGsxA/MATQKImy7N49 
7GT/M38F+TrpBobag1O3buE99fOLyws4Tbc+sZMdHxoiGZDAIRNQS2rv475E6ktj 
7vd5CYvOkA6+8sX1+hPcNlkHtHB1OFkJRsYp6k0zkyC9adjBM7QTYWJjIDxtYWtj 
bUBhYWEuY29tPohGBBMRAgAGBQJOQdIfAAoJEDBSJUXPd92GRSQAoItbtbToOg7a 
/hcg2sA/aBEQNwuxAKCGR69vmSoCWoBP5waPk0UsjM3BSbjMBE5B0h8QAgCUlP7A 
lfO4XuKGVCs4NvyBpd0KA0m0wjndOHRNSIz44x24vLfTO0GrueWjPMqRRLHO8zLJ 
S/BXO/BHo6ypjN87Af0VPV1hcq20MEW2iujh3hBwthNwBWhtKdPXOndJGZaB7lsh 
LJuWv9z6WyDNXj/SBEiV1gnPm0ELeg8Syhy5pCjMAf9QHehP2eCFqfEwTAnaOlA6 
CU+rYHKPZaI9NUwCA7qD2d93/l08/+ZtFvejZW1RWrJ8qfLDRtlPgRzigoF/CXbR 
iEYEGBECAAYFAk5B0h8ACgkQMFIlRc933YZRrACfUnWTjHHN+QsEEoJrwRvFmvzj 
bR4An24pTpeeN+I6R59O/sdmYsAhjULX 
=sStS 
-----END PGP PUBLIC KEY BLOCK----- 
+0

ここに「----- BEGIN PGP公開鍵ブロック-----」ブロックを置くことができますか? – shem

+0

@shemここに行く – calccrypto

答えて

4

、詳細を調べるのに十分な時間を持っていないが、私はあなたが「よね)関連する値が既に掲載されているにもかかわらず、要求されるように公開鍵でありますパディングを正しく適用する(または適用しない)。その結果、いくつかの入力の長さに対して正しい結果が出てくるが、他の入力の長さは出てこない。

私はこのよりに見てますね、私は懸賞金ワイヤーの下で何かを取得したい:)

編集:OK、エラーを検出しました。なぜそれを取得しているのか分かりませんが、修正されていれば正しい答えが出てきます。あなたの-動作していない例では、

w = 702955297882281869313155599553522395227576660460 // s^-1 mod q 

として(S^-1のmod q)はwを計算するが、私は2によってオフ

w = 702955297882281869313155599553522395227576660458 

を入手します!本当に、本当に値を閉じる。そして、私が右であることを示すことができる。

s * your_w mod q = 308227306159276200906356361486529830038073078504 
s * my_w mod q = 1 

あなたはこのワット値をプラグインする場合は、あなたが助け

u1 = 536931432138658080437983667536052790245747416035 
u2 = 591698847955233800072578903940910445457030802333 
v = (g^u1 * y^u2) % p % q = 666804200764671083282351405489424949903645052927 
r == v 

希望を取得します。

+0

うん。私の賭けはパディングの長さによる1つ1つのエラーです。 – pg1989

+0

笑それはどうしたの?私の任意の精度の整数コードを掘る時間 – calccrypto

+1

これはちょうど学習のためのものですよね?私は今まで以上に重要な「*自分で暗号を実装しないでください」という警告を繰り返す必要があるようです。 –

関連する問題