- カスカ 懐石・研究 38枚目
586 :名無しさん@編集中[sage]:2014/09/13(土) 06:42:08.39 ID:GNy8O3MF - >>562
カードIDだけじゃなくて、少なくともEMMサイズとプロトコル番号(当然0x0X)くらいはまともな値を入れないとダメだと思う それらの値は復号のために必要な情報なんだから あと、SCardTransmit()がエラーになったらリトライしてるけど、カードの処理時間測定してるんだから、 エラーでのリトライなんてノイズにしかならないんじゃないか?
|
- カスカ 懐石・研究 38枚目
592 :名無しさん@編集中[sage]:2014/09/13(土) 12:19:59.44 ID:GNy8O3MF - T422CA23にカードリーダはSCR3310-NTTComに対して、
1.>>562を手直ししてプライオリティREALTIMEで実行(EMMの全体長はとりあえず17、ボディ長は必然的に10、プロトコルは当然0) 2.Kmはわかってるので、上のプログラムで投げたのと同じそれぞれのデータに対して、ヤキソバソースでTransform()+GenerateMAC()の IsOddParity()が真になる回数カウント 3.比較 てのをやってみた(OSはwin8.1pro x64) 結果の最初の方だけ貼るとこんな感じ ---------------------------------------- // 実機 00 00 00 00 00 00 00 01 00 : 41878 00 00 00 00 00 00 00 02 00 : 41872 00 00 00 00 00 00 00 04 00 : 41841 00 00 00 00 00 00 00 08 00 : 41873 00 00 00 00 00 00 00 10 00 : 41872 00 00 00 00 00 00 00 20 00 : 41876 00 00 00 00 00 00 00 40 00 : 41869 00 00 00 00 00 00 00 80 00 : 41866 // エミュ 00 00 00 00 00 00 00 01 00 : 24 00 00 00 00 00 00 00 02 00 : 19 00 00 00 00 00 00 00 04 00 : 22 00 00 00 00 00 00 00 08 00 : 20 00 00 00 00 00 00 00 10 00 : 27 00 00 00 00 00 00 00 20 00 : 23 00 00 00 00 00 00 00 40 00 : 20 00 00 00 00 00 00 00 80 00 : 15 ---------------------------------------- こりゃダメだね
|
- カスカ 懐石・研究 38枚目
593 :名無しさん@編集中[sage]:2014/09/13(土) 14:13:59.87 ID:GNy8O3MF - と思ったけど、どっか間違ってたらしい
長さ設定とかのミスを排除できるようにコード変更してもう一回実行したらこうなった ---------------------------------------- // 実機 00 00 00 00 00 00 00 01 / 31 : 144949 00 00 00 00 00 00 00 02 / 31 : 144767 00 00 00 00 00 00 00 04 / 31 : 144759 00 00 00 00 00 00 00 08 / 31 : 144673 00 00 00 00 00 00 00 10 / 31 : 144951 00 00 00 00 00 00 00 20 / 31 : 144768 00 00 00 00 00 00 00 40 / 31 : 144717 00 00 00 00 00 00 00 80 / 31 : 144548 // エミュ 00 00 00 00 00 00 00 01 / 31 : 47 00 00 00 00 00 00 00 02 / 31 : 44 00 00 00 00 00 00 00 04 / 31 : 44 00 00 00 00 00 00 00 08 / 31 : 42 00 00 00 00 00 00 00 10 / 31 : 47 00 00 00 00 00 00 00 20 / 31 : 44 00 00 00 00 00 00 00 40 / 31 : 43 00 00 00 00 00 00 00 80 / 31 : 40 ---------------------------------------- 31は暗号部の長さで、表示している頭の8バイト以外は全部0で埋めてる 傾向はそろってるね 行けるかも・・・
|
- カスカ 懐石・研究 38枚目
594 :名無しさん@編集中[sage]:2014/09/13(土) 14:16:59.03 ID:GNy8O3MF - ついでに、EMMの最低長チェックはTにも入ってるのかなと思って調べてみたのがこっち
---------------------------------------- 00 00 00 00 00 00 00 00 / 7 : 53947 00 00 00 00 00 00 00 01 / 8 : 55122 00 00 00 00 00 00 00 01 / 9 : 92307 00 00 00 00 00 00 00 01 / 10 : 93513 00 00 00 00 00 00 00 01 / 16 : 101559 00 00 00 00 00 00 00 01 / 17 : 114581 00 00 00 00 00 00 00 01 / 18 : 115620 ---------------------------------------- 暗号部の長さ9がEMM全体長17のやつで、カードIDからMACまでを含めようとするとこれが最低長になるはず ちょうど8 -> 9で仮に復号処理に入ってた場合ProcessBlockCipher()の実行回数が増える長さなので 判断付きづらいんだけど、16 -> 17の時はこんなに増加してないので、やっぱり全体長16以下は 復号処理には入らずに弾かれてる感じ
|
- カスカ 懐石・研究 38枚目
596 :名無しさん@編集中[sage]:2014/09/13(土) 15:15:49.69 ID:GNy8O3MF - ん
ttp://pastebin.com/vPVFwDU7 エミュの方は全部貼るのは微妙なのでmain()だけ
|
- カスカ 懐石・研究 38枚目
599 :名無しさん@編集中[sage]:2014/09/13(土) 16:38:44.25 ID:GNy8O3MF - ああそうか、8バイト周期で同じ事やってるんだから、同じ8バイトのブロックを並べとけば
毎回同じ引数でBlockCipher()が呼ばれる事になるんだね 後は「どのラウンドが速かったのか」か・・・
|