Flashで暗号化復号化の結果が合わない
2008年12月02日05:00
ActionScriptで作ったRSA公開鍵暗号ライブラリのテストをしているのだけど、どうも結果が合わない。 モンテカルロテストという形式のテストをやると、1000分の1~1000分の3 ぐらいの割りと大きい確立で結果がおかしくなる。 これはユーザーが千人いれば一日に一回動作がおかしくなるということで非常に大きい確率だ。 これは凄く変だ。 今日一日この問題のことをずっと考えていた。 僕が作ったプログラムのバグかもしれないし、たたき台として拾ってきたプログラムがもともと持っていたバグかもしれない。
ひょっとして、と思って、ウェブブラウザでテストしてみた。 僕が作ったライブラリはActionScriptでもJavaScriptでも動作する。
やってみたら結果は正しかった。
これは、ひょっとするとFlashのバグかもしれない。 それはありそうな感じだ。 しかし、絡み合う要素が多すぎて、どの演算で結果がおかしくなるのか、まったく検討が付かない。 結果がおかしくなる値のパターンを洗い出してデバッグするしかないだろう。
ひょっとして、と思って、ウェブブラウザでテストしてみた。 僕が作ったライブラリはActionScriptでもJavaScriptでも動作する。
やってみたら結果は正しかった。
これは、ひょっとするとFlashのバグかもしれない。 それはありそうな感じだ。 しかし、絡み合う要素が多すぎて、どの演算で結果がおかしくなるのか、まったく検討が付かない。 結果がおかしくなる値のパターンを洗い出してデバッグするしかないだろう。
コメント一覧
おかあつ 2008年12月02日 09:53
同じ鍵と同じ平文では再現率100%ということがわかった。
何で結果がこういうことになるのか...
多分32ビット整数の演算のどこかに問題があるんだろうなぁ...
=====================================
JavaScript
t:2be14a5f97a63100309cffa93e202fa2b134b2c65bd1b7fe9736db2f0406c712
e:1d01fdac4e0e4cbc548c86876d9ba3260bd9906edb08bd9bc276f97272b04a54
d:59509101b98840e6f0d0067fcb9a9b6a08182c141b4af3fc9da9bc709ba997c
result:ERROR!
t:6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
e:4215096ae0e2ea2bf3d7b69abebecedb5b11fc2c31525beb7faaee43245eda06
d:6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
result:OK
Java
text :2be14a5f97a63100309cffa93e202fa2b134b2c65bd1b7fe9736db2f0406c712
crypt :52dad3bef41dd6577f672e0f88882dbf842948a8d03db1537fbcc73c26b034de
decrypt:2be14a5f97a63100309cffa93e202fa2b134b2c65bd1b7fe9736db2f0406c712
text :6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
crypt :4215096ae0e2ea2bf3d7b69abebecedb5b11fc2c31525beb7faaee43245eda06
decrypt:6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
何で結果がこういうことになるのか...
多分32ビット整数の演算のどこかに問題があるんだろうなぁ...
=====================================
JavaScript
t:2be14a5f97a63100309cffa93e202fa2b134b2c65bd1b7fe9736db2f0406c712
e:1d01fdac4e0e4cbc548c86876d9ba3260bd9906edb08bd9bc276f97272b04a54
d:59509101b98840e6f0d0067fcb9a9b6a08182c141b4af3fc9da9bc709ba997c
result:ERROR!
t:6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
e:4215096ae0e2ea2bf3d7b69abebecedb5b11fc2c31525beb7faaee43245eda06
d:6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
result:OK
Java
text :2be14a5f97a63100309cffa93e202fa2b134b2c65bd1b7fe9736db2f0406c712
crypt :52dad3bef41dd6577f672e0f88882dbf842948a8d03db1537fbcc73c26b034de
decrypt:2be14a5f97a63100309cffa93e202fa2b134b2c65bd1b7fe9736db2f0406c712
text :6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360
crypt :4215096ae0e2ea2bf3d7b69abebecedb5b11fc2c31525beb7faaee43245eda06
decrypt:6026448539dd1d77f75dd0fc057453c5506335b9f546fb007d3d47d929abd360