RASSSA-PSS

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. január 10-én felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

Az RSASSA-PSS ( RSA S ignature S cheme with A pendix- P robabilistic S ignature S cheme ) egy aszimmetrikus digitális aláírási algoritmus . Mihir Bellare és Phillip Rogaway által 1996-ban javasolt PSS kódolási elv alapján [1] . Bekerült a PKCS # 1 v2.1 2002-es szabványába, amelyet az RSA Laboratories , USA fejlesztett ki .

Az algoritmus leírása

Hagyja, hogy Alice ( A ) egy M üzenetet küldjön Bobnak ( B ), amelyben azt S elektronikus aláírással igazolja . B , miután üzenetet kapott A -tól , ellenőriznie kell az aláírást (ellenőriznie kell a hitelességét).

Ebben a cikkben a "magas bájt (bit)" a legelső, bal oldali bájtra (bitre) utal. A "legkisebb jelentőségű bájt (bit)" az utolsó, jobb oldali bájtra (bit) utal.
A "karakterlánc" alatt egy tömböt is kell érteni, amelynek elemei egyetlen bájtok. Így az " n szám karakterlánc-reprezentációja" az N karakterlánc , amelyet az n bináris jelölés bájtokra való felosztásával kapunk . Például:

n = 258 {100000010} N = [1|2] {00000001|00000010}

Ebben az esetben az [1] a magas bájt, a [2] pedig az alacsony bájt.
Az alábbiakban ismertetjük az elektronikus aláírás létrehozásának és ellenőrzésének funkcióit.

Aláírás létrehozása

RSASSA-PSS-Sign((n, e, d), M)

Beviteli adat: (n, e, d)  - privát kulcs M - aláírandó üzenet, karakterlánc Kimenet: S — aláírás, k  hosszúságú karakterlánc Lehetséges hibák: "az üzenet túl hosszú"; "kódolási hiba" Sorrend:
  1. PSS kódolás: Alkalmazzuk a PSS-Encode függvényt (melyet alább ismertetünk) az M karakterláncra , hogy megkapjuk az x hosszúságú EM karakterláncot . Az EM olyan, hogy az EM egész szám reprezentációjának bithossza nem haladja meg az emBitet , a legjelentősebb bitek zBitje pedig 0 . EM = PSS-kódolás (M, emBits) Vegye figyelembe, hogy az EM hossza (k-1) , ha az emBits egyenletesen osztható 8 -cal, egyébként pedig egyenlő k -val . Ha a PSS-kódolás "túl hosszú üzenet" hibát ad vissza, hibaüzenet jelenik meg, és a munka leáll. Ha a PSS-kódolás "kódolási hibát" ad vissza, hibaüzenet jelenik meg, és a munka leáll.
  2. RSA aláírás:
    • Rendeljen m egy egész számot az EM karakterlánchoz .
    m = str-to-int(EM) s = m d mod n
    • Jelentsük s-t k hosszúságú bájtkarakterláncként .
    S = int-to-str(s, k)
  3. S kimenet
PSS kódolás

PSS-kódolás (M, emBits)

Lehetőségek: Hash  - hash függvény , egy hLen hosszúságú bájtkarakterláncot ad vissza MGF  - maszkgeneráló funkció. Egy bemeneti bájtkarakterláncot adott hosszúságú karakterláncsá alakít át (részletesen lentebb). sLen a bájtkarakterlánc sójának  hossza Beviteli adat: M  - aláírandó üzenet, karakterlánc Az emBits az EM  kimeneti karakterlánc egész szám reprezentációjának maximális hossza bitekben , legalább (8hLen + 8sLen + 9) Kimenet: EM  - kódolt üzenet, emLen hosszúságú karakterlánc Lehetséges hibák: "az üzenet túl hosszú"; "kódolási hiba" Sorrend:
  1. Ha M hossza nagyobb, mint a kiválasztott hash-függvény bemeneti karakterláncának maximális lehetséges hossza ( byte az SHA-1- hez ), akkor a "túl hosszú üzenet" üzenet jelenik meg, és a művelet leáll.
  2. mHash = Hash(M), hLen hosszúságú karakterlánc .
  3. Ha emLen < (hLen + sLen + 2), „kódolási hiba” üzenet jelenik meg, és a munka leáll.
  4. Egy sLen hosszúságú véletlenszerű karakterláncsó keletkezik ; ha sLen = 0 , a só  üres karakterlánc .
  5. M' = (0x)00 00 00 00 00 00 00 00||mHash||só , egy (8 + hLen + sLen) hosszúságú karakterlánc, amelynek első 8 bájtja nulla.
  6. H = Hash(M') , hLen hosszúságú karakterlánc .
  7. Egy PS karakterlánc jön létre , amely (emLen - hLen - sLen - 2) null bájtból áll. A PS hossza nulla lehet.
  8. DB = PS||0x01||só , hosszúságú karakterlánc (emLen - hLen - 1) .
  9. dbMask = MGF(H, emLen - hLen - 1) , hosszúságú karakterlánc (emLen - hLen - 1) .
  10. maskedDB = DB ⊕ dbMask .
  11. A maskedDB magas bájtjában lévő magas bitek zBitjei 0 -ra vannak állítva .
  12. TF=0xBC .
  13. EM = maszkoltDB||H||TF
  14. EM kimenet .

Aláírás ellenőrzése

RSASSA-PSS-ellenőrzés((n, e), M, S)

Beviteli adat: (n, e)  - nyilvános kulcs M  - fogadott üzenet, karakterlánc S  az ellenőrizendő aláírás, egy k hosszúságú karakterlánc Kimenet: "az aláírás érvényes" vagy "az aláírás érvénytelen" Sorrend:
  1. Hossz ellenőrzés: Ha az S aláírás hossza meghaladja a k bájtot, akkor az „aláírás érvénytelen” döntés születik, és a munka leáll.
  2. RSA ellenőrzés:
    • Rendelje m az S karakterlánc egész számszerű reprezentációját .
    m = str-to-int(S)
    • Nyilvános kulcsot használunk.
    s = me mod n
    • Jelentsük m-t emLen hosszúságú bájtkarakterláncként.
    EM = int-to-str(m, emLen) Vegye figyelembe, hogy emLen (k-1) , ha az emBits egyenletesen osztható 8 -cal, egyébként egyenlő k -val. Ha az m szám rögzítése több mint emLen bájtot vesz igénybe, akkor az „aláírás érvénytelen” döntés születik, és a munka leáll.
  3. PSS ellenőrzés: Használjuk a PSS-Verify funkciót (melyet alább ismertetünk). A végső döntés megegyezik a PSS-Verify döntésével . Kimenet = PSS-ellenőrzés (M, EM, emBits)
PSS ellenőrzés

PSS-ellenőrzés (M, EM, emBits)

Lehetőségek: A hash  egy hash függvény, amely egy hLen hosszúságú bájt karakterláncot ad vissza. MGF  - maszkgeneráló funkció. Egy bemeneti bájtkarakterláncot adott hosszúságú karakterláncsá alakít át (részletesen lentebb). sLen  a só byte karakterlánc hossza. Beviteli adat: M  — fogadott üzenet, karakterlánc. EM - kódolt üzenet, emLen  hosszúságú karakterlánc . Az emBits  egy EM karakterlánc egész szám reprezentációjának maximális hossza bitekben, legalább (8hLen + 8sLen + 9) . Kimenet: "az aláírás érvényes" vagy "az aláírás érvénytelen" Sorrend:
  1. Ha az M hossz nagyobb, mint a kiválasztott hash függvény bemeneti karakterláncának maximális lehetséges hossza ( bájt az SHA-1-hez), akkor „érvénytelen aláírás” döntés születik, és a munka leáll.
  2. mHash = Hash(M) , hLen hosszúságú karakterlánc .
  3. Ha emLen < (hLen + sLen + 2) , az aláírás érvénytelen, és a munka leáll.
  4. Ha az EM alacsony bájt ( TF mező ) nem egyenlő 0xBC -vel , akkor az "aláírás érvénytelen" döntés születik, és a munka leáll.
  5. A magasabb ( emLen - hLen - 1) EM bájtok a maskedDB karakterláncba , a következő hLen bájtok pedig a H karakterláncba kerülnek .
  6. Ha a maskedDB magas bájtjának magas zBits bitjei nem nullák, akkor az "aláírás érvénytelen" döntés születik, és a munka leáll.
  7. dbMask = MGF(H, emLen - hLen - 1) , hosszúságú karakterlánc (emLen - hLen - 1) .
  8. DB = maszkoltDB ⊕ dbMask .
  9. A DB magas bájtjában lévő magas bitek zBitjei 0 -ra vannak állítva .
  10. Ha a DB magasabb (emLen - hLen - sLen - 2) bájtjai nem egyenlőek 0 -val, vagy ha a következő bájt (a pozícióban lévő bájt (emLen - hLen - sLen - 1) , feltételezve, hogy a magas bájt pozíciója 1 ) nem egyenlő 0x01 -gyel , akkor döntés születik "az aláírás érvénytelen" és a munka leáll.
  11. A DB utolsó sLen bájtjai a só bájt karakterláncba vannak írva.
  12. M' = (0x)00 00 00 00 00 00 00 00||mHash||só , egy (8 + hLen + sLen) hosszúságú karakterlánc , amelynek első 8 bájtja nulla.
  13. H' = Hash(M') , hLen hosszúságú karakterlánc.
  14. Ha H = H' , akkor az "aláírás érvényes" határozatot kell meghozni, ellenkező esetben az "aláírás érvénytelen" határozatot kell hozni.

Maszkgenerálási funkció

Ismertesse a PSS függvényekben használt MGF-et.
Az MGF egy tetszőleges hosszúságú bájt karakterláncot és a kimeneti karakterlánc kívánt hosszúságát fogadja be bemenetként, és egy kívánt hosszúságú bájtkarakterláncot állít elő. A bemeneti és kimeneti karakterláncok hosszára korlátozások vonatkozhatnak, de ezek általában nagyon nagyok. MGF determinisztikus; a kimeneti karakterláncot teljesen a bemeneti karakterlánc határozza meg. Az MGF kimenetének pszeudo-véletlennek kell lennie, vagyis a kimeneti karakterlánc egy részének ismeretében gyakorlatilag lehetetlen megjósolni a kimeneti karakterlánc többi részét. Ezt úgy érhetjük el, hogy az MGF-et egy ugyanolyan tulajdonságú hash függvényre tesszük. Ez a tulajdonság szükséges, mivel az algoritmus megbízhatóságának bizonyítása ezen alapul.
A PKCS#1 v2.1 szabvány a következő függvény használatát javasolja MGF-ként:

MGF1 (M, maszkLen)

Lehetőségek: A hash  egy hash függvény, amely egy hLen hosszúságú bájt karakterláncot ad vissza. Beviteli adat: M  a konvertálandó karakterlánc. maskLen  a kimeneti bájtkarakterlánc kívánt hossza, nem haladja meg a 2 32 hLen értéket . Kimenet: maszk  egy karakterlánc hosszú maszkLen. Lehetséges hibák: "A maszk túl hosszú" Sorrend:
  1. Ha maskLen > 2 32 hLen , a "maszk hossza túl nagy" üzenet jelenik meg, és a művelet leáll.
  2. Legyen T  egy üres karakterlánc.
  3. A ciklusban FOR i 0-tól 0 -ig VÉGREHAJT:
    • Képzeljük el az i -t egy 4 bájt hosszúságú C byte-os karakterláncként .
    C = int-to-str(i,4)
    • M' = M||C .
    • Adjuk hozzá az M' hash eredményt a T karakterlánc végéhez .
    T = T||Hash(M')
  4. Írjuk be a maszkba a T karakterlánc felső maskLen bájtját.
  5. A maszk kimenete .

Opciók

A PKCS#1 v2.1 szabványban az RSASSA-PSS az RSASSA-PSS azonosítót kapja , amelyhez négy paraméterből álló sorozatot kell társítani. Ezek a paraméterek közé tartozik a hash függvény, az MGF, a véletlenszerűen generált sólánc hossza ( sLen ) , a trailerField ( TF mező ). Ezeknek a paramétereknek a kérdéses szabványban megadott alapértelmezett értékeit a táblázat tartalmazza.

Paraméter Típusú Alapértelmezett érték
hashAlgoritm HashAlgoritm sha1
maskGenAlgoritm MaskGenAlgoritm mgf1SHA1
sóhossz EGÉSZ SZÁM húsz
trailerField TrailerField trailerFieldBC
  • Javasoljuk, hogy az MGF alapjául szolgáló hash függvény (ha van ilyen) megegyezzen a hashAlgorithm paraméterben megadottal .
  • A saltLength paraméter alapértelmezett értéke megegyezik a kiválasztott hash függvény ( hLen ) kimeneti karakterláncának hosszával. A többi opciótól eltérően a saltLength -et nem kell rögzíteni egy adott RSA kulcspárhoz.
  • A TF mező az IEEE P1363a tervezettel való kompatibilitás érdekében került bevezetésre . A figyelembe vett szabványban csak a 0xBC- vel egyenlő trailerField érték támogatott . Ennek azonban más formája is lehet, például HID||0xCC , ahol a HID  az ISO/IEC 10118 szabványban meghatározott hash függvény azonosítója.

Jellemzők

Az RSA-PSS metódus megengedett üzenethossza vagy korlátlan, vagy nagyon nagy értékre korlátozódik a PSS kódolásban használt hash függvény miatt.

Az RSA-PSS abban különbözik a többi RSA-alapú digitális aláírási sémától , hogy inkább valószínűségi, mint determinisztikus. véletlenszerűen generált érték ( só ) használatát foglalja magában. A só értéke növeli az áramkör megbízhatóságát [1] .

Megbízhatóság

Feltételezve, hogy egy tetszőleges gyökérmodulo n kiszámítása kivitelezhetetlen művelet, és a hash függvény és az MGF rendelkezik a szükséges tulajdonságokkal, az RSA-PSS biztosítja az aláírás biztonságát. A robusztusság abban az értelemben bizonyítható, hogy az aláírás feltörésének nehézsége közvetlenül összefüggésbe hozható egy kriptográfiai primitív feltörésének nehézségével (az RSA mögött meghúzódó matematikai probléma ). A sikeres feltörés valószínűsége és a legjobb RSA-PSS feltörési módszer futási ideje nagyon közel áll az RSA inverz függvényét kereső algoritmus ugyanazokhoz a paraméterekhez .

A korábban ismertetett aláírási séma eltér a Mihir Bellare és Phillip Rogaway által javasolt eredeti algoritmustól [1] . Ennek a sémának a szükséges bizonyítékát azonban Jacob Jonsson szolgáltatja [2] .

Jegyzetek

  1. 1 2 3 Mihir Bellare, Phillip Rogaway "A digitális aláírások pontos biztonsága – Aláírás RSA és Rabin segítségével " Letöltve: 2010. november 1. Az eredetiből archiválva : 2010. június 13.
  2. Jacob Jonsson "Biztonsági bizonyítékok az RSA-PSS aláírási séma és változataihoz" (PDF) . Letöltve: 2010. november 1. Az eredetiből archiválva : 2016. március 6..

Források