Challenge/response algorithm

Обсуждение вопросов, связанных с смарт-картами: магнитными, контактными - синхронными и асинхронными, бесконтактными.

Модератор: Step

Challenge/response algorithm

Сообщение unseen » Вс ноя 19, 2006 2:27 pm

Hi all,

first of all, sorry for not writing in russian (i dont know russian language)
My question is, could somebody please give me the challenge/response algorithm used in the payphonecards? (second generation - Romanian one would be great) :D
I've written an emulator, (with PIC16F84) but without this algorithm, its useless. :cry:
I know, that GeGel made some emulators, (Bingo 4_4) so i have some idea how the algorithm works. Anyhow, i have lots of questions (6 byte key, ...)

If someone could help please, would be highly appreciated.
Thanks in advance, unseen.
unseen
 
Сообщений: 3
Зарегистрирован: Вс ноя 19, 2006 1:29 pm

Сообщение Step » Пн ноя 20, 2006 2:57 pm

Hi,

in emulator GeGel's not present algorithm АА.
Step
Администратор
 
Сообщений: 55
Зарегистрирован: Чт янв 19, 2006 2:48 pm

Сообщение unseen » Вт ноя 21, 2006 6:16 pm

Hi Step,

yes, in GeGel's emulator THERE IS a Ch/R algorithm (i added some comments for myself in hungarian lang.):
Код: выделить все

L011F           MOVLW   0FFH            ;       Challenge/respons algorithm
                TRIS    PORTA
                MOVLW   031H
                MOVWF   FSR
                MOVLW   090H
                MOVWF   INTCON
L0125           MOVF    RTCC,W          ;A
                SUBLW   020H            ;       120H-6FH=B1H=177dec  (0-6FH=91H +20H =B1H)
                BTFSS   STATUS,02H      ;Skip if bit = 1
                GOTO    L0125
L0129           BTFSC   PORTA,04H       ;B Skip if bit = 0
                GOTO    L0129
                RRF     PORTA,F         ;       RA0=DataPin
                RRF     INDIR,F         ;       beforgatja az INDIR-be
L012D           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L012D
                INCF    FSR,F
L0130           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L0130
                RRF     PORTA,F
                RRF     INDIR,F
L0134           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L0134
                BTFSC   FSR,03H         ;Skip if bit = 0  Megnezi, hogy elert-e a 38. FSR -re
                GOTO    L015D           ;(31.-38. -ig helyezi el a kapott RND-t)
L0138           BTFSC   PORTA,04H       ;A Skip if bit = 0 (Szerintem a 32.-37. ig! Ez=6 bajt)
                GOTO    L0138
                RRF     PORTA,F
                RRF     INDIR,F
L013C           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L013C
L013E           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L013E
                RRF     PORTA,F
                RRF     INDIR,F
L0142           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L0142
L0144           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L0144
                RRF     PORTA,F
                RRF     INDIR,F
L0148           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L0148
L014A           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L014A
                RRF     PORTA,F
                RRF     INDIR,F
L014E           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L014E
L0150           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L0150
                RRF     PORTA,F
                RRF     INDIR,F
L0154           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L0154
L0156           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L0156
                RRF     PORTA,F
                RRF     INDIR,F
L015A           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L015A
                GOTO    L0129

L015D           BSF     PORTA,000H      ;A  Itt mar megkapta a RANDOM -ot a SAM-tol
                MOVLW   0FEH
                TRIS    PORTA
                MOVLW   0F7H            ;Ezek az AUTH. KEY
                MOVWF   12H
                MOVLW   0B9H
                MOVWF   13H
                MOVLW   011H
                MOVWF   14H
                MOVLW   0C3H
                MOVWF   15H
                MOVLW   004H
                MOVWF   16H
                MOVLW   0DAH
                MOVWF   17H
                MOVLW   038H
                MOVWF   FSR
;                MOVLW   005H
;                MOVWF   EEADR
;L0170           BSF     STATUS,005H     ;A Ez a rutin elhelyezi a RAM-ba az RND utan a Ser NR.-t
;                BSF     EEDATA,000H     ;  es a penzes reszeket. (A Ser NR. helye nem hiszem, hogy
;                BCF     STATUS,005H     ;  megegyezik a romannal!)
;                MOVF    EEDATA,W
;                MOVWF   INDIR
;                INCF    EEADR,F
;                INCF    FSR,F
;                BTFSS   FSR,06H         ;Skip if bit = 1
;                GOTO    L0170

                MOVLW   003H             ; Az alabbi 3 programresz bemasolja a ramba a
                MOVWF   EEADR            ; Roman kartyanak megfelelo SrNR.-t;penzes reszeket;
L0170           BSF     STATUS,005H     ;A es a 15., 16. bajtokat (38.-41. helyekre)
                BSF     EEDATA,000H             ;
                BCF     STATUS,005H             ;
                MOVF    EEDATA,W
                MOVWF   INDIR
                INCF    EEADR,F
                INCF    FSR,F
                MOVLW   06H
                SUBWF   EEADR,W
                BTFSS   STATUS,Z
                GOTO    L0170

                INCF    EEADR
                INCF    EEADR
L1170           BSF     STATUS,005H     ;A
                BSF     EEDATA,000H
                BCF     STATUS,005H
                MOVF    EEDATA,W
                MOVWF   INDIR
                INCF    EEADR,F
                INCF    FSR,F
                MOVLW   0DH
                SUBWF   EEADR,W
                BTFSS   STATUS,Z
                GOTO    L1170

                INCF    EEADR
L2170           BSF     STATUS,005H     ;A
                BSF     EEDATA,000H
                BCF     STATUS,005H
                MOVF    EEDATA,W
                MOVWF   INDIR
                INCF    EEADR,F
                INCF    FSR,F
                MOVLW   10H
                SUBWF   EEADR,W
                BTFSS   STATUS,Z
                GOTO    L2170

                BCF     STATUS,CY
                CLRF    0EH       ;eredmeny tarolo  ;Innen lefele szamolja ki a 2 bajtos Response-t
                CLRF    0CH
                CLRF    EEDATA           ;A 12. tol a 17. ig van a key
;                BSF     INDIR,000H      ;Ez alatt a 32. tol a 37. ig van az RND + 38-3F ig a SerNR.
                MOVLW   0EFH             ;es a Penzes reszek. Ezeket sorra kotyvalja ossze a 30. es a 31. bajtban,
                MOVWF   11H   ;160 CLK counter  ;A 0E -ben tarolja a reszleges eredmenyeket, mig a 0F (=8) szamlalja a
                MOVLW   010H                    ;KEY-RND parok bitjeit. (Majd a SrNR.-t -- penzes reszt a Key-el)
                MOVWF   18H       ;2 byte resp cntr     ;(Kesobb latszik majd, hogy a 0E -bol kuldi ki az eredmenyt)
L0181           MOVLW   031H            ;A              ;A baj csak az, hogy NEM hasznalja fel a15. es a 16. bajtot!!!!!!
                MOVWF   FSR
                CLRF    0FH       ;8 bit counter (KEY)-(RND/SerNR./penzes/15., 16.) parok forgatasahoz
L0184           MOVF    12H,W           ;A
                MOVWF   31H       ;KEY aktualis bajtjanak taroloja
                INCF    FSR,F
                MOVF    INDIR,W
                MOVWF   30H       ;RND/SerNR./penzes/15., 16. aktualis bajtjanak taroloja
                BSF     0FH,003H
                MOVF    0EH,W
L018B           BTFSC   31H,00H         ;A Skip if bit = 0
                XORWF   30H,W
                RRF     31H,F
                RRF     30H,F
                DECFSZ  0FH,F           ;Skip if Zero
                GOTO    L018B
                MOVWF   0EH
                MOVF    13H,W
                MOVWF   31H
                INCF    FSR,F
                MOVF    INDIR,W
                MOVWF   30H
                BSF     0FH,003H
                MOVF    0EH,W
L0199           BTFSC   31H,00H         ;A Skip if bit = 0
                XORWF   30H,W
                RRF     31H,F
                RRF     30H,F
                DECFSZ  0FH,F           ;Skip if Zero
                GOTO    L0199
                MOVWF   0EH
                MOVF    14H,W
                MOVWF   31H
                INCF    FSR,F
;                BTFSC   FSR,06H         ;Skip if bit = 0

                MOVF    INDIR,W
                MOVWF   30H
                BSF     0FH,003H
                MOVF    0EH,W
L01A9           BTFSC   31H,00H         ;A Skip if bit = 0
                XORWF   30H,W
                RRF     31H,F
                RRF     30H,F
                DECFSZ  0FH,F           ;Skip if Zero
                GOTO    L01A9
                MOVWF   0EH
                MOVF    15H,W
                MOVWF   31H
                INCF    FSR,F
                MOVF    INDIR,W
                MOVWF   30H
                BSF     0FH,003H
                MOVF    0EH,W
L01B7           BTFSC   31H,00H         ;A Skip if bit = 0
                XORWF   30H,W
                RRF     31H,F
                RRF     30H,F
                DECFSZ  0FH,F           ;Skip if Zero
                GOTO    L01B7
                MOVWF   0EH
                MOVF    16H,W
                MOVWF   31H
                INCF    FSR,F

                MOVF    STATUS,W
                MOVWF   STATUS_SAV
                MOVLW   42H
                SUBWF   FSR,W
                BTFSC   STATUS,Z        ;Ha eljut a 15., 16. bajt kotyvasztasanak a
                GOTO    L01DB           ;vegehez is, akkor ide ugrik el.

                MOVF    INDIR,W
                MOVWF   30H
                BSF     0FH,003H
                MOVF    0EH,W
L01C5           BTFSC   31H,00H         ;A Skip if bit = 0
                XORWF   30H,W
                RRF     31H,F
                RRF     30H,F
                DECFSZ  0FH,F           ;Skip if Zero
                GOTO    L01C5
                MOVWF   0EH
                MOVF    17H,W
                MOVWF   31H
                INCF    FSR,F
                MOVF    INDIR,W
                MOVWF   30H
                BSF     0FH,003H
                MOVF    0EH,W
L01D3           BTFSC   31H,00H         ;A Skip if bit = 0
                XORWF   30H,W
                RRF     31H,F
                RRF     30H,F
                DECFSZ  0FH,F           ;Skip if Zero
                GOTO    L01D3
                MOVWF   0EH
                GOTO    L0184

L01DB           RRF     12H,F    ;A      Ide ugrik, ha befejezte a szamigalast.
                RRF     13H,F
                RRF     14H,F    ;       Elforgatja a kulcsokat (Carry-n keresztul!!!)
                RRF     15H,F          ; tehat a tulcsordulasokat tovabbviszi!
                RRF     16H,F          ; (mint eg 48 bites korregiszter)
                RRF     17H,F
                BCF     12H,007H       ; es, ha a 17. tulcsordult, akkor beteszi a 12 -esbe
                BTFSC   STATUS,00H     ;Skip if bit = 0
                BSF     12H,007H
L01E4           MOVF    RTCC,W    ;A     Itt szamolja a 160 CLK -okat
                SUBWF   11H,W
                BTFSS   STATUS,02H      ;Skip if bit = 1
                GOTO    L01E4
L01E8           BTFSC   PORTA,04H       ;A Skip if bit = 0
                GOTO    L01E8
                MOVF    0EH,W           ; ebben van az aktualis kikuldendo adat,
L01EB           BTFSS   PORTA,04H       ;A Skip if bit = 1
                GOTO    L01EB
                MOVWF   PORTA           ; es itt kuldi ki.
                MOVLW   0A0H            ; Itt noveli 160 -al a 11H reg -et, hogy ujra szamolhasson.
                ADDWF   11H,F
                DECFSZ  18H,F           ;Skip if Zero  Ez szamolja a 2 bajt kikuldeset!
                                        ;      A 18H -ban 10H van! = 16 = 2x8(bajt)
                GOTO    L0181           ;MINDEZT (AZ ELEJETOL) MEGISMETLI 16 -SZOR
                                        ;(MIDIG A 0EH REG. LSB-JET KULDI KI, MAJD AZ EGESZET UJRASZAMOLJA)

but, he didnt calculate the authentication key, (only KEY1 and alg1 are used) just inserted as constants. Thats my problem, cause i dont know how to calculate them, and also would be wery useful, if i could take a look in the authentication algorithm itself. (in high language, pseudo or mathematical form)
I also find a page of GeGel, (see attachement) but did not understand it. :(
He speaks something about the SAM modules, i think that would be interesting.
У вас нет доступа для просмотра вложений в этом сообщении.
unseen
 
Сообщений: 3
Зарегистрирован: Вс ноя 19, 2006 1:29 pm

Сообщение Step » Пт ноя 24, 2006 1:01 pm

Hi,

GeGel only simulates the protocol therefore as there is no check of response in the payphone (SAM not present) if only there was an answer and it would change at change of the counter and/or challenge. There not KEY1, not algoritm AA, this abracadabra has thought up GeGel. ;)
Step
Администратор
 
Сообщений: 55
Зарегистрирован: Чт янв 19, 2006 2:48 pm


Вернуться в Смарт-карты

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron