Results 1 to 6 of 6

Thread: seca2 info algotrythm

  1. #1

    Talking seca2 info algotrythm

    ALGORITMO DI DECRIPTAZIONE SECA2
    L’algoritmo di decriptaggio di Mediaguard opera su una parola criptata di 8-byte, utilizzando una chiave di 16-byte per produrre una parola di 8-byte in chiaro.
    La chiave di 16-byte è costituita da una Chiave Primaria di 8-byte a da una Secondaria ugualmente di 8-byte. Qualche volta la ChiaveSecondaria coincide con quella Primaria, altre volte è diversa. Per chiarire questa situazione di confusione esaminiamo più approfonditamente le 2 chiavi.
    Entrambi le chiavi, Primaria e secondaria, sono numerate da 0x00 a 0x0F in modo che potenzialmente possono esserci 16 Chiavi Primarie e 16 Chiavi Secondarie. Sembra che le chiavi operative (Operation keys - per ECM) sono da 0x0C a 0x0F e che le chiavi da 0x00 a 0x0B sono di manipolazione (management keys - per EMM).
    Ma le chiavi primarie, a capriccio delle emittenti, quando sono state memorizzate nelle Smartcard possono essere state numerate da 0x10 a 0x1F. Solo le chiavi Primarie così numerate possono essere utilizzate con le chiavi Secondarie equivalenti. Il parametro P1 del comando C1 32 determina se questo avverrà; se P1 è nella forma 0x1n.

    Così ora dovremmo capire come è formata la chiave di 16-byte per l’algoritmo.

    L’algoritmo è formato da due fasi:

    Preparazione della Chiave
    Manipolazione dei dati

    1) Preparazione della Chiave

    immaginiamo che i byte della chiave siano disposti in forma circolare come fossero avvolti su un cerchio, in questo modo:

    ...k15, k16, k1, k2, ..., k13, k14...
    Iniziamo da k1, prendiamo il byte che ‘lo precede’ (cioè k16), facciamo lo XOR di questo con quello che ‘segue’ k1 (cioè k2) e con una costante C. usiamo questo risultato come indice nei primi 256-byte della tabella T1 e facciamo lo XOR del valore ottenuto da T1 con k1. Questo è il nuovo valore di k1. La costante C ha un valore iniziale nullo, e la tabella T1 è mostrata alla fine di questa sezione.

    Così k1 = k1 XOR T1(k16 XOR k2 XOR C).

    Ripetiamo questo procedimento altre 3 volte su k2,k3 e k4 per assegnare:

    k2 = k2 XOR T1(k1 XOR k3 XOR C)
    k3 = k3 XOR T1(k2 XOR k4 XOR C)
    k4 = k4 XOR T1(k3 XOR k5 XOR C).

    Incrementiamo la costante C di 1 e facciamo altre 4 iterazioni (su k5…k8):

    k5 = k5 XOR T1(k4 XOR k6 XOR C)
    k6 = k6 XOR T1(k5 XOR k7 XOR C)
    k7 = k7 XOR T1(k6 XOR k8 XOR C)
    k8 = k8 XOR T1(k7 XOR k9 XOR C)

    Incrementiamo la costante C e facciamo altre 4 iterazioni (su k9…k12):

    K9 = k9 XOR T1(k8 XOR k10 XOR C)
    K10 = k6 XOR T1(k9 XOR k11 XOR C)
    k11 = k7 XOR T1(k10 XOR k12 XOR C)
    k12 = k8 XOR T1(k11 XOR k13 XOR C)


    Incrementiamo la costante C e facciamo altre 4 iterazioni (su k13…k16):

    K13 = k13 XOR T1(k12 XOR k14 XOR C)
    K14 = k14 XOR T1(k13 XOR k15 XOR C)
    k15 = k15 XOR T1(k14 XOR k16 XOR C)
    k16 = k16 XOR T1(k15 XOR k1 XOR C)

    A questo punto C=3.

    Incrementiamo ancora C e ricominciamo dall’inizio per ottenre k1 …k16.
    Ora C=7

    Ripetiamo ancora due volte il processo Ü incrementando sempre C e formando nuovi valori per tutti e 16 i ‘k’ byte.
    A questo punto C=15 e abbiamo ripetuto l’algoritmo 16 x 4 volte.
    Abbiamo terminato la fase 1 di preparazione della chiave ed I valori finali di k1,...,k16 sono quelli usati nella fase di manipolazione dei dati.

    L’algoritmo è formato da 16 cicli. Ogni ciclo opera solo su 4 byte di chiave e 4 byte di dati.
    Detti k1, k2, …, k16 i byte della chiave (ottenuti dopo la fase di preparazione della chiave) e detti i byte dei dati d1,d2,…,d8 si ha:

    Numero CicloByte di chiaveByte di dati
    1, 5, 9, 13k13, k14, k15, k16d5, d6, d7, d82, 6, 10, 14K9, k10, k11, k12d5, d6, d7, d83, 7, 11, 15k5, k6, k7, k8d5, d6, d7, d84, 8, 12, 16k1, k2, k3, k4d5, d6, d7, d8
    Un ciclo consiste in:

    Fare lo XOR dei byte di chiave con quelli di dati:
    - Eseguire la Funzione Nucleo (core function) sui byte di dati per calcolare i 4 nuovi byte di dati
    - Fare lo XOR di questi valori con gli altri 4 byte dati per calcolare i 4 nuovi valori per i byte di dati d5-d8 per il ciclo successivo
    - Processare I byte di chiave per calcolare I 4 nuovi byte di chiave da utilizzare nel ciclo seguente.
    Primo passo - XOR dei byte di chiave con quelli di dati
    Questo è semplice:

    d5 = K(i) XOR d5
    d6 = K(i+1) XOR d6
    d7 = K(i+2) XOR d7
    d8 = K(i+3) XOR d8

    dove i = 13 per i cicli 1, 5, 9, 13
    9 per i cicli 2, 6, 10, 14
    5 per i cicli 3, 7, 11, 15
    1 per i cicli 4, 8, 12, 16.

    Secondo passo - Funzione Nucleo

    Prima eseguire 4 accessi alla Tabella 1:
    d5 = T1[d5], d6 = T1[d6], d7 = T1[d7], d8 = T1[d8]

    Successivamente utilizzare la Tabella 2 (vedi oltre). Il termine '~' significa che scambio di posto del mezzo byte meno significativo con quello più significativo (es. 11100010 = E2 Þ ~E2 = 2E = 00101110):

    d5 = d8 XOR d5
    d7 = T2[(~d8) + d7]

    d8 = d7 XOR d8
    d6 = T2[ (~d7) + d6]

    d7 = d6 XOR d7
    d5 = T2[ (~d6) + d5]

    Ora si deve utilizzare la Tabella 1 come segue:

    d6 = d5 XOR d6
    d8 = T1[(~d5) + d8]

    d5 = d8 XOR d5
    d7 = T1[(~d8) + d7]

    d8 = d7 XOR d8
    d6 = T1[(~d7) + d6]

    Infine eseguire:

    d7 = d6 XOR d7
    d6 = d5 XOR d6.

    Se in qualche addizione il valore risultante è maggiore di 0xFF, sottrarre il valore 0x0100 prima di accedere alle tabelle.

    Terzo Passo - Calcolare i nuovi valori dei byte di dati per il prosimo ciclo

    Questi si ottengono dalla Tabella 2 procedendo come segue:

    d1 = T2[d6] XOR d1
    d2 = T2[d8] XOR d2
    d3 = T2[d5] XOR d3
    d4 = T2[d7] XOR d4

    Prima di utilizzare i byte di dati d1, …, d8 occorre scambiarli come segue :

    d1 D d5
    d2 D d6
    d3 D d7
    d4 D d8
    NOTA: al termine del 16° ciclo però questo scambio NON deve essere fatto ed i byte di dati decriptati sono d1, …, d8.

    Quarto passo - Ottenere nuovi byte di chiave per il successivo ciclo
    Eseguire le seguenti operazioni:

    k(i+3) = k(i+3) XOR T1[k(i+4) XOR k(i+2) XOR C]
    k(i+2) = k(i+2) XOR T1[k(i+3) XOR k(i+1) XOR C]
    k(i+1) = k(i+1) XOR T1[K(i+2) XOR k(i) XOR C]
    k(i) = k(i) XOR T1[k(i+1) XOR k(i-1) XOR C]

    dove i = 13 per i cicli 1, 5, 9, 13
    9 per i cicli 2, 6, 10, 14
    5 per i cicli 3, 7, 11, 15
    1 per i cicli 4, 8, 12, 16.

    Nei casi in cui la suddetta formula dia suffissi k fuori dall’intervallo 1-16, si deve considerare il valore ottenuto da k facendone il modulo 16. Es. Se k = 17, allora k = k mod 16 = 1, se k=16, allora k = k mod 16 = 0).
    Il valore della costante C dipende dal numero di ciclo. Per i cicli 1, 2, …, 15, 16 tale costante ha valori rispettivamente pari a 0x0F, 0x0E, …, 0x01, 0x00.
    TABELLE
    Tabella 1:
    02ah0e1h00bh013h03eh06eh032h048h0d3h031h008h08ch08 fh095h0bdh0d0h0e4h06dh050h081 h020h030h0bbh075h0f5h0d4h07ch087h02ch04eh0e8h0f4h0 beh024h09eh04dh080h037h0d2h05f h0dbh004h07ah03fh014h072h067h02dh0cdh015h0a6h04ch0 2eh03bh00ch041h062h0fah0eeh083 h01eh0a2h001h00eh07fh059h0c9h0b9h0c4h09dh09bh01bh0 9ch0cah0afh03ch073h01ah065h0b1h 076h084h039h098h0e9h053h094h0bah01dh029h0cfh0b4h00 dh005h07dh0d1h0d7h00ah0a0h05c
    h091h071h092h088h0abh093h011h08ah0d6h05ah077h0b5h0 c3h019h0c1h0c7h08eh0f9h0ech035h 04bh0cch0d9h04ah018h023h09fh052h0ddh0e3h0adh07bh04 7h097h060h010h043h0efh007h0a5h 049h0c6h0b3h055h028h051h05dh064h066h0fch044h042h0b ch026h009h074h06fh0f7h06bh04fh0 2fh0f0h0eah0b8h0aeh0f3h063h06ah056h0b2h002h0d8h034 h0a4h000h0e6h058h0ebh0a3h082h0 85h045h0e0h089h07eh0fdh0f2h03ah036h057h0ffh006h069 h054h079h09ah0b6h06ch0dch08bh0a 7h01fh090h003h017h01ch0edh0d5h0aah05eh0feh0dah078h 0b0h0bfh012h0a8h022h021h03dh0c2 h0c0h0b7h0a9h0e7h033h0fbh0f1h070h0e5h017h096h0f8h0 8dh046h0a1h086h0e2h040h038h0f6h 068h025h016h0ach061h027h0cbh05bh0c8h02bh00fh099h0d eh0ceh0c5h

    Tabella 2:
    0bfh011h06dh0fah026h07fh0f3h0c8h09eh0ddh03fh016h09 7h0bdh008h080h051h042h093h049h0
    5bh064h09bh025h0f5h00fh024h034h044h0b8h0eeh02eh0da h08fh031h0cch0c0h05eh08ah061h0a
    1h063h0c7h0b2h058h009h04dh046h081h082h068h04bh0f6h 0bch09dh003h0ach091h0e8h03dh0
    94h037h0a0h0bbh0ceh0ebh098h0d8h038h056h0e9h06bh028 h0fdh084h0c6h0cdh05fh06eh0b6h0
    32h0f7h00eh0f1h0f8h054h0c1h053h0f0h0a7h095h07bh019 h021h023h07dh0e1h0a9h075h03eh0d
    6h0edh08eh06fh0dbh0b7h007h041h005h077h0b4h02dh045h 0dfh029h022h043h089h083h0fch0d
    5h0a4h088h0d1h0f4h055h04fh078h062h01eh01dh0b9h0e0h 02fh001h013h015h0e6h017h06ah08
    dh00ch096h07eh086h027h0a6h00dh0b5h073h071h0aah036h 0d0h006h066h0dch0b1h02ah05ah0
    72h0beh03ah0c5h040h065h01bh002h010h09fh03bh0f9h02b h018h05ch0d7h012h047h0efh01ah0
    87h0d2h0c2h08bh099h09ch0d3h057h0e4h076h067h0cah03c h0fbh090h020h014h048h0c9h060h0
    b0h070h04eh0a2h0adh035h0eah0c4h074h0cbh039h0deh0e7 h0d4h0a3h0a5h004h092h08ch0d9h0
    7ch01ch07ah0a8h052h079h0f2h033h0bah01fh030h09ah000 h050h04ch0ffh0e5h0cfh059h0c3h0e3
    h00ah085h0b3h0aeh0ech00bh0feh0e2h0abh04ah0afh069h0 6ch02ch05dh
    ALGORITMO DI SEGNATURA DI MESSAGGIO

    Sembra che sia per i messaggi ECM che per quelli EMM venga utilizzato solo un algoritmo di segnatura.

    La procedura consiste nei seguenti passi:

    - Inizializzazione di un buffer hash di 8-byte
    - XOR tra gli 8 byte di dati di ingresso ed il contenuto del buffer
    - Esecuzione dell’algoritmo di segnatura
    - Ripetizione degli ultimi 2 passi fino all’esaurimento dei byte di dati in ingresso da processare
    - Comparazione del risultato con gli 8-byte di dati di segnatura.

    Essendo l’algoritmo di segnatura l’inverso dell’algoritmo di decriptaggio (come per Eurocrypt S), non è necessario descriverlo in tutti i suoi dettagli (come invece è stato fatto per l’algoritmo di decriptaggio).

    L’inizializzazione del buffer hash è basata sul valore dei bit 7-5 più significativi del parametro P1, come segue:

    - P1(7-5) = 1: ultimi 6 byte della risposta C1 0E 00 00 08 + 00 00

    - P1(7-5) = 2: valore UA della Smartcard

    - P1(7-5) = 3: valore SA della Smartcard (vedi oltre)

    - P1(7-5) = qualsiasi altro valore: 00 00 00 00 00 00 00 00.

    L’algoritmo consiste in 16 cicli. Ogni ciclo opera solo su 4 byte di chiave e 4 byte di dati. Detti k1, k2, …, k16 i byte della chiave (ottenuti dopo la fase di preparazione della chiave) e detti i byte dei dati d1,d2,…,d8 si ha:

    Numero CicloByte di chiaveByte di dati
    1, 5, 9, 13k1, k2, k3, k4d5, d6, d7, d82, 6, 10, 14K5, k6, k7, k8d5, d6, d7, d83, 7, 11, 15K9, k10, k11, k12d5, d6, d7, d84, 8, 12, 16k13, k14, k15, k16d5, d6, d7, d8

    Un ciclo consiste in:

    Processare i byte di chiave per calcolare i 4 nuovi byte di chiave da utilizzare nel ciclo seguente
    Fare lo XOR dei byte di chiave con quelli di dati:
    Eseguire la Funzione Nucleo (core function) sui byte di dati per calcolare i 4 nuovi byte di dati
    Fare lo XOR di questi valori con gli altri 4 byte dati per calcolare i 4 nuovi valori per i byte di dati d5-d8 per il ciclo successivo.

    L’ ordine delle operazioni è lievemente diverso rispetto a quello di decriptaggio dal momento che il processo è inverso a quest’ultimo
    È simile al ‘left shifts DES function’ e ‘DES function, right shift’ di Eurocrypt M e S.Primo passo - Ottenere nuovi byte di chiave per il successivo ciclo
    Eseguire le seguenti operazioni:

    k(i) = k(i) XOR T1[k(i+1) XOR k(i-1) XOR C]
    k(i+1) = k(i+1) XOR T1[K(i+2) XOR k(i) XOR C]
    k(i+2) = k(i+2) XOR T1[k(i+3) XOR k(i+1) XOR C]
    k(i+3) = k(i+3) XOR T1[k(i+4) XOR k(i+2) XOR C]

    dove i = 1 per i cicli 1, 5, 9, 13
    5 per i cicli 2, 6, 10, 14
    9 per i cicli 3, 7, 11, 15
    13 per i cicli 4, 8, 12, 16.

    Nei casi in cui la suddetta formula dia suffissi k fuori dall’intervallo 1-16, si deve considerare il valore ottenuto da k facendone il modulo 16. Es. Se k = 17, allora k = k mod 16 = 1, se k=16, allora k = k mod 16 = 0).
    Il valore della costante C dipende dal numero di ciclo. Per i cicli 1, 2, …, 15, 16 tale costante ha valori rispettivamente pari a 0x00, 0x01, …, 0x0E, 0x0F.
    Questo annulla (unwinding) l’effetto della manipolazione della chiave circolare nell’algoritmo di decriptaggio.

    Secondo passo - XOR dei byte di chiave con quelli di dati
    Questo è semplice:

    d5 = K(i) XOR d5
    d6 = K(i+1) XOR d6
    d7 = K(i+2) XOR d7
    d8 = K(i+3) XOR d8

    dove i = 1 per i cicli 1, 5, 9, 13
    5 per i cicli 2, 6, 10, 14
    9 per i cicli 3, 7, 11, 15
    13 per i cicli 4, 8, 12, 16.

    L’inversione dei suffissi annulla (unwinds) l’interazione dei byte di chiave con quelli di dati, confrontati nell’algoritmo di decriptaggio.

    Terzo passo - Funzione Nucleo
    Prima eseguire 4 accessi alla Tabella 1:

    d5 = T1[d5], d6 = T1[d6], d7 = T1[d7], d8 = T1[d8]

    Successivamente utilizzare la Tabella 2 (vedi oltre). Il termine '~' significa che scambio di posto del mezzo byte meno significativo con quello più significativo (es. 11100010 = E2 Þ ~E2 = 2E = 00101110):

    d5 = d8 XOR d5
    d7 = T2[(~d8) + d7]

    d8 = d7 XOR d8
    d6 = T2[ (~d7) + d6]

    d7 = d6 XOR d7
    d5 = T2[ (~d6) + d5]
    Ora si deve utilizzare la Tabella 1 come segue:

    d6 = d5 XOR d6
    d8 = T1[(~d5) + d8]

    d5 = d8 XOR d5
    d7 = T1[(~d8) + d7]

    d8 = d7 XOR d8
    d6 = T1[(~d7) + d6]
    Infine eseguire:

    d7 = d6 XOR d7
    d6 = d5 XOR d6.
    Se in qualche addizione il valore risultante è maggiore di 0xFF, sottrarre il valore 0x0100 prima di accedere alle tabelle.
    Questo passo è identico a quello relativo all Funzione Nucleo di decriptaggio, ma chiaramente opera in direzione opposta.

    Quarto passo - Calcolare i nuovi valori dei byte di dati per il prosimo ciclo
    Questi si ottengono dalla Tabella 2 procedendo come segue:

    d1 = T2[d6] XOR d1
    d2 = T2[d8] XOR d2
    d3 = T2[d5] XOR d3
    d4 = T2[d7] XOR d4

    Prima di utilizzare i byte di dati d1, …, d8 occorre scambiarli come segue :

    d1 D d5
    d2 D d6
    d3 D d7
    d4 D d8

    NOTA: al termine del 16° ciclo però questo scambio NON deve essere fatto e i byte d1, …, d8 rappresentano la segnatura completa che dovrebbe coincidere agli 8 byte che seguenti al parametro 0x82.
    Sono consapevole che un’occhiata a tutto questomateriale è abbastanza scoraggiante, ma se studierete il materiale attraverso un esempio, troverete il coraggio di andare avanti.
    Per ricapitolare, possiamo dire che la parola di controllo è il Decriptaggio Mediaguard, viceversa il messaggio di segnatura è il Criptaggio Mediaguard.
    Le chiavi sono memorizzate per l’uso diretto con il criptaggio Mediaguard e ad ogni ciclo viene generata una chiave circolare per quel ciclo.
    Possiamo quindi dire che l’algoritmo di Criptaggio opera sulle chiavi circolari R1, R2, …, R16.
    L’algoritmo di decryptaggio è l’inverso di quello di Criptaggio; il fine della fase di preparazione della chiave è quello di generare R16. Ad ogni ciclo di Decriptaggio viene generata la chiave circolare per il successivo ciclo.
    Le chiavi circolari per il decriptaggio sono R16, R15, …, R1. L’intera procedura assicura che il Decryptaggio è esattamente il procedimento inverso del Criptaggio.

    Per inciso, se qualcuno riconosce l’algoritmo ed il suo nome, forse avrà la gentilezza di farmelo sapere.

  2. #2
    New Member
    Join Date
    18-10-2005
    Location
    Dumyat, Egypt.
    Posts
    3
    Uploads
    0

    Re: seca2 info algotrythm

    Hi Indic64,

    I saw your article about Seca2 but I'm not good enough in French. So I'm asking why you didn't write it in English to be more likely understood by everybody around the world.

    I hope to find the same article in english.

  3. #3

    Re: seca2 info algotrythm

    Hi,

    Sorry, itsn't French but Italian !

  4. #4
    VIP Member abelleira's Avatar
    Join Date
    01-04-2005
    Location
    France
    Posts
    250
    Uploads
    3

    Re: seca2 info algotrythm

    Veramente un lavoro al completo!!!!!

  5. #5
    Awaiting Email Confirmation jacol's Avatar
    Join Date
    12-03-2005
    Location
    UK
    Posts
    41
    Uploads
    1

    Re: seca2 info algotrythm & emu?

    algotrythm in english;
    don't my translate

    and Emu seca2
    by KrasnalTM
    thanks

    please moderators check this file

  6. #6
    Junior Member
    Join Date
    16-01-2006
    Posts
    16
    Uploads
    1

    Re: seca2 info algotrythm & emu?

    a me sa tanto di seca 1... vedere Mediaguard Musing o SecaFaq2.3 (manuali di comprensione della codifica).
    L'algo in questione a prima vista sembrerebbe quello descritto in questi testi.

    Bye bye

    hman

Similar Threads

  1. seca2
    By manuska in forum French / Français
    Replies: 0
    Last Post: 02-02-2009, 18:50:01
  2. 301 fta seca2 ???????
    By becking in forum Smartbox
    Replies: 0
    Last Post: 30-12-2007, 18:17:57
  3. is seca2 down yet or not?
    By home9 in forum Seca Mediaguard
    Replies: 0
    Last Post: 09-10-2007, 17:50:21
  4. Seca2
    By GastonFernandez in forum Italian / Italiano
    Replies: 4
    Last Post: 10-11-2005, 12:30:51
  5. seca2
    By loute2 in forum French / Français
    Replies: 9
    Last Post: 24-09-2005, 11:45:30

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •