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).
- (n, e) a nyilvános kulcs, és (n, e, d) az A megfelelő privát kulcsa . n egy pozitív egész szám, amelynek hossza modBits bit vagy k bájt (például: n bináris jelölése 1028 karaktert igényel , akkor modBits = 1028 , k = 129 , mivel ).

- emBits = modBits - 1

- zBits = 8emLen - emBits
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:
- 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.
- 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)
- 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:
- 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.

- mHash = Hash(M), hLen hosszúságú karakterlánc .
- Ha emLen < (hLen + sLen + 2), „kódolási hiba” üzenet jelenik meg, és a munka leáll.
- Egy sLen hosszúságú véletlenszerű karakterláncsó keletkezik ; ha sLen = 0 , a só üres karakterlánc .
- 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.
- H = Hash(M') , hLen hosszúságú karakterlánc .
- Egy PS karakterlánc jön létre , amely (emLen - hLen - sLen - 2) null bájtból áll. A PS hossza nulla lehet.
- DB = PS||0x01||só , hosszúságú karakterlánc (emLen - hLen - 1) .
- dbMask = MGF(H, emLen - hLen - 1) , hosszúságú karakterlánc (emLen - hLen - 1) .
- maskedDB = DB ⊕ dbMask .
- A maskedDB magas bájtjában lévő magas bitek zBitjei 0 -ra vannak állítva .
- TF=0xBC .
- EM = maszkoltDB||H||TF
- 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:
- 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.
- 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.
- 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:
- 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.

- mHash = Hash(M) , hLen hosszúságú karakterlánc .
- Ha emLen < (hLen + sLen + 2) , az aláírás érvénytelen, és a munka leáll.
- 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.
- 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 .
- 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.
- dbMask = MGF(H, emLen - hLen - 1) , hosszúságú karakterlánc (emLen - hLen - 1) .
- DB = maszkoltDB ⊕ dbMask .
- A DB magas bájtjában lévő magas bitek zBitjei 0 -ra vannak állítva .
- 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.
- A DB utolsó sLen bájtjai a só bájt karakterláncba vannak írva.
- 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.
- H' = Hash(M') , hLen hosszúságú karakterlánc.
- 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:
- Ha maskLen > 2 32 hLen , a "maszk hossza túl nagy" üzenet jelenik meg, és a művelet leáll.
- Legyen T egy üres karakterlánc.
- 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')
- Írjuk be a maszkba a T karakterlánc felső maskLen bájtját.
- 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 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. (határozatlan)
- ↑ 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.. (határozatlan)
Források