Integrity Error on ChangeKey desfire ev3

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Integrity Error on ChangeKey desfire ev3

ソリューションへジャンプ
1,894件の閲覧回数
amrin-hexondata
Contributor II

Hi, I'm trying to change default aes key on keyNo = 0, to a different aes key. However, I keep getting 

0x1E integrity error on sending the command, which i think indicates wrong crc.
I wrote in javascript. This is my crc32 calculation function

 

static crc32 = (input) => {
        const crcTable = new Array(256);
        for (let i = 0; i < 256; i++) {
          let c = i;
          for (let j = 0; j < 8; j++) {
            c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
          }
          crcTable[i] = c >>> 0;
        }
      
        let crc = 0 ^ (-1);
      
        for (let i = 0; i < input.length; i++) {
          crc = (crc >>>  ^ crcTable[(crc ^ input.charCodeAt(i)) & 0xFF];
        }
      
        crc = crc ^ (-1);  
        // Convert the integer to an array of bytes  
        const crcBytes = [];  for (let i = 0; i < 4; i++) { 
            crcBytes.push((crc >>> (i * 8)) & 0xFF);  
        }  
        
        return crcBytes.reverse();
    }​


From my understanding, CRC is calculated on Cmd + keyNo + (newKey xor oldkey) + keyversion. Something like this.

let data_to_crc = cmd.concat(_keyNo).concat(_newKey).concat(_keyVersion);
let data_to_crc_string = DesfireUtils.getHexFromDecArray(data_to_crc);
let crc_data = DesfireUtils.crc32(data_to_crc_string);

 

If I run my crc32 function on the data, i'd get the same result when using this online crc32 calculator 
Then cryptogram = newkey + keyversion + crc_data + padding
Then i send over <C4 00 Cryptogram>
Sending over encrypted cryptogram yields same result as not encrypted, 0x1E. encryption key is session key, iv = 0
タグ(3)
0 件の賞賛
返信
1 解決策
1,875件の閲覧回数
amrin-hexondata
Contributor II
Fixed the issue. The problem lies in CRC32 algorithm.
I used this C code and transcribed / implement it in javascript
http://www.rfidiot.org/crc32.c

元の投稿で解決策を見る

0 件の賞賛
返信
1 返信
1,876件の閲覧回数
amrin-hexondata
Contributor II
Fixed the issue. The problem lies in CRC32 algorithm.
I used this C code and transcribed / implement it in javascript
http://www.rfidiot.org/crc32.c
0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-1864587%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EChangeKey%20desfire%20ev3%E3%81%AE%E6%95%B4%E5%90%88%E6%80%A7%E3%82%A8%E3%83%A9%E3%83%BC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1864587%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E7%A7%81%E3%81%AFkeyNo%20%3D%200%E3%81%AE%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AEaes%E3%82%AD%E3%83%BC%E3%82%92%E5%88%A5%E3%81%AEaes%E3%82%AD%E3%83%BC%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%E3%81%97%E3%81%8B%E3%81%97%E3%80%81%E7%A7%81%E3%81%AF%E5%BE%97%E7%B6%9A%E3%81%91%E3%81%BE%E3%81%99%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CSPAN%3E%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AE%E9%80%81%E4%BF%A1%E6%99%82%E3%81%AB%E6%95%B4%E5%90%88%E6%80%A7%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%970x1E%E3%80%81CRC%E3%81%8C%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E7%A4%BA%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Ejavascript%E3%81%A7%E6%9B%B8%E3%81%8D%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%93%E3%82%8C%E3%81%8C%E7%A7%81%E3%81%AEcrc32%E8%A8%88%E7%AE%97%E9%96%A2%E6%95%B0%E3%81%A7%E3%81%99%3C%2FSPAN%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CBR%20%2F%3E%3CPRE%20class%3D%22lia-code-sample%20language-javascript%22%3E%3CCODE%20translate%3D%22no%22%3Estatic%20crc32%20%3D%20(input)%20%3D%26gt%3B%20%7B%0A%20%20%20%20%20%20%20%20const%20crcTable%20%3D%20new%20Array(256)%3B%0A%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%26lt%3B%20256%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20let%20c%20%3D%20i%3B%0A%20%20%20%20%20%20%20%20%20%20for%20(let%20j%20%3D%200%3B%20j%20%26lt%3B%208%3B%20j%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20c%20%3D%20((c%20%26amp%3B%201)%20%3F%20(0xEDB88320%20%5E%20(c%20%26gt%3B%26gt%3B%26gt%3B%201))%20%3A%20(c%20%26gt%3B%26gt%3B%26gt%3B%201))%3B%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20crcTable%5Bi%5D%20%3D%20c%20%26gt%3B%26gt%3B%26gt%3B%200%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20let%20crc%20%3D%200%20%5E%20(-1)%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20for%20(let%20i%20%3D%200%3B%20i%20%26lt%3B%20input.length%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20crc%20%3D%20(crc%20%26gt%3B%26gt%3B%26gt%3B%20%3CLI-EMOJI%20id%3D%22lia_smiling-face-with-sunglasses%22%20title%3D%22%3Asmiling_face_with_sunglasses%3A%22%3E%3C%2FLI-EMOJI%3E%20%5E%20crcTable%5B(crc%20%5E%20input.charCodeAt(i))%20%26amp%3B%200xFF%5D%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20crc%20%3D%20crc%20%5E%20(-1)%3B%20%20%0A%20%20%20%20%20%20%20%20%2F%2F%20Convert%20the%20integer%20to%20an%20array%20of%20bytes%20%20%0A%20%20%20%20%20%20%20%20const%20crcBytes%20%3D%20%5B%5D%3B%20%20for%20(let%20i%20%3D%200%3B%20i%20%26lt%3B%204%3B%20i%2B%2B)%20%7B%20%0A%20%20%20%20%20%20%20%20%20%20%20%20crcBytes.push((crc%20%26gt%3B%26gt%3B%26gt%3B%20(i%20*%208))%20%26amp%3B%200xFF)%3B%20%20%0A%20%20%20%20%20%20%20%20%7D%20%20%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20return%20crcBytes.reverse()%3B%0A%20%20%20%20%7D%E2%80%8B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3CBR%20%2F%3E%E7%A7%81%E3%81%AE%E7%90%86%E8%A7%A3%E3%81%A7%E3%81%AF%E3%80%81CRC%E3%81%AFCmd%20%2B%20keyNo%20%2B(newKey%20x%E3%81%BE%E3%81%9F%E3%81%AFoldkey)%2Bkeyversion%E3%81%A7%E8%A8%88%E7%AE%97%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82%E3%81%93%E3%82%93%E3%81%AA%E6%84%9F%E3%81%98%E3%80%82%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-javascript%22%3E%3CCODE%20translate%3D%22no%22%3Elet%20data_to_crc%20%3D%20cmd.concat(_keyNo).concat(_newKey).concat(_keyVersion)%3B%0Alet%20data_to_crc_string%20%3D%20DesfireUtils.getHexFromDecArray(data_to_crc)%3B%0Alet%20crc_data%20%3D%20DesfireUtils.crc32(data_to_crc_string)%3B%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3CDIV%3E%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E5%AF%BE%E3%81%97%E3%81%A6crc32%E9%96%A2%E6%95%B0%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%3CA%20href%3D%22https%3A%2F%2Fcrccalc.com%2F%22%20target%3D%22_self%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3E%E3%81%93%E3%81%AE%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3crc32%E8%A8%88%E7%AE%97%E6%A9%9F%3C%2FA%3E%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AB%E5%90%8C%E3%81%98%E7%B5%90%E6%9E%9C%E3%81%8C%E5%BE%97%E3%82%89%E3%82%8C%E3%81%BE%E3%81%99%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%E6%AC%A1%E3%81%AB%E3%80%81cryptogram%20%3D%20newkey%20%2B%20keyversion%20%2B%20crc_data%20%2B%20%E3%83%91%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%3C%2FDIV%3E%3CDIV%3E%E6%AC%A1%E3%81%AB%E3%80%81%3CC4%2000%3D%22%22%20cryptogram%3D%22%22%3E%20%E3%82%92%E9%80%81%E4%BF%A1%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%95%E3%82%8C%E3%81%9F%E6%9A%97%E5%8F%B7%E3%81%A7%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A8%E5%90%8C%E3%81%98%E7%B5%90%E6%9E%9C%E3%81%8C%E5%BE%97%E3%82%89%E3%82%8C%E3%81%BE%E3%81%990x1E%E3%80%82%E6%9A%97%E5%8F%B7%E5%8C%96%E3%82%AD%E3%83%BC%E3%81%AF%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%20%E3%82%AD%E3%83%BC%E3%80%81iv%20%3D%200%20%E3%81%A7%E3%81%99%3C%2FC4%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-1864913%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ERe%3AChangeKey%20desfire%20ev3%E3%81%AE%E6%95%B4%E5%90%88%E6%80%A7%E3%82%A8%E3%83%A9%E3%83%BC%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1864913%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E5%95%8F%E9%A1%8C%E3%82%92%E4%BF%AE%E6%AD%A3%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E5%95%8F%E9%A1%8C%E3%81%AFCRC32%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E3%81%AB%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%E7%A7%81%E3%81%AF%E3%81%93%E3%81%AEC%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%80%81javascript%E3%81%A7%E6%9B%B8%E3%81%8D%E8%B5%B7%E3%81%93%E3%81%97%2F%E5%AE%9F%E8%A3%85%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%3CBR%20%2F%3E%3CA%20href%3D%22http%3A%2F%2Fwww.rfidiot.org%2Fcrc32.c%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3Ehttp%3A%2F%2Fwww.rfidiot.org%2Fcrc32.c%3C%2FA%3E%3C%2FLINGO-BODY%3E