Kérdés:
Az RNG szerepet játszik a PGP aláírásában?
mricon
2014-03-24 22:28:09 UTC
view on stackexchange narkive permalink

Van egy Jenkins rendszerünk, amely épít és PGP-aláírja a szoftverkiadásokat, és fontolóra vesszük az aláíró összetevő egy elszigetelt virtuális gépre való áthelyezését ahelyett, hogy a teljes építői infrastruktúra részeként futtatnánk - a magánkulcsok jobb elkülönítése érdekében az összes többi viszonylag nyilvános mozgó részből.

Néhány fejlesztő a virtuális gép használata ellen érvel, mivel a virtuális gépek általában kevés jó entrópia forrással rendelkeznek, ezért általában nem alkalmasak a titkosításra. Ellenérvet szeretnék mondani arról, hogy mivel máshol generált PGP kulcsokat fogunk használni, az egyetlen virtuális gépen végrehajtott titkosítási műveletek egyáltalán nem támaszkodnak az RNG-re. Megértettem a PGP aláírási folyamatot, hogy kiszámítja a sha1 / sha2 kivonatot (nem használ RNG-t), majd kiszámítja az aláírást a magánkulcs segítségével (nem használ RNG-t).

Ez helyes? Vagy hiányzik valami, ami az erős RNG-t tenné szükségessé egy olyan rendszer számára, amely csak PGP-t ír alá, de soha nem titkosít PGP-t?

Kettő válaszokat:
Karol Babioch
2014-03-25 05:42:40 UTC
view on stackexchange narkive permalink

Sajnos az erre a kérdésre adott korábbi válaszok nemcsak tévesek , hanem és nagyon veszélyesek is.

Noha bizonyosan igaz, hogy a digitális aláírások általában kivonatolási funkciókat tartalmaznak, amelyek természetüknél fogva eleve determinisztikusak, vegye figyelembe, hogy a digitális aláírások nem csupán egyszerű hash ok. Nyilvános kulcsú titkosítást tartalmaznak, amelyet úgy használnak, hogy csak a magánkulcs törvényes tulajdonosa képes aláírni valamit. Elég sok digitális aláírási algoritmus létezik, az alábbiakat széles körben használják a gyakorlatban:

Legalább DSA, ECDSA és ElGamal tervezéshez feltétlenül véletlenszámokat igényelnek . Egy véletlenszám újrafelhasználása a magánkulcs helyreállításához vezethet. Ez triviálisan egyszerű, és bárki, aki érdeklődik a téma iránt, csak néhány nagyon egyszerű egyenlettel értheti meg.

A múltban mindenféle támadás megtörtént, amelyek éppen ezt a tényt fejtették ki. Valószínűleg a legelterjedtebb példa a PlayStation 3 hackje, amely a következő xkcd képregényt hozta elénk:

https://xkcd.com/221/

RSA-val másrészt ez nem olyan egyszerű. Az "iskolai könyv" RSA nem igényel véletlenszerű számokat. Lehetséges azonban, hogy a támadók egzisztenciális hamisítási támadásokat hajtsanak végre az egyszerű RSA-implementációk ellen. Ezért a gyakorlatban módosított sémákat alkalmaznak, amelyek valószínűségi módon működhetnek. Az alapgondolat az, hogy az érvényes aláírásoknak meg kell felelniük egy bizonyos formának. Az egyik ilyen szabványt Probabistic Signature Protocol (PSS) -nek hívják.

A GPG a fenti sémák mindegyikét végrehajtotta. Mostanra úgy tűnik, hogy az RSA az alapértelmezett a legtöbb rendszerben. Az RFC 4880 szerint az OpenPGP az EMSA-PKCS1-v1_5 alkalmazást használja, amely egy determinisztikus kitöltési séma, és valójában nem igényel véletlenszerű számokat.

Tehát lényegében : Igen , a digitális aláírásokhoz véletlenszerű számokra van szükség , és lehet, hogy rossz ötlet a virtuális használat gépek ilyen feladatokra. Legalább ezen tudatosan kell gondolkodni.

Az (EC) DSA hagyományos megvalósításának véletlenszerűségre van szüksége. De lehetséges megvalósítani őket determinisztikus módon vagy véletlenszerű módon, de még az RNG szívásakor sem bukik meg. Az OpenSSL nemrég váltott egy hibabiztos, randomizált megvalósításra. Nem tudom, hogy a GPG tartalmaz-e kockázatos / gyenge minőségű DSA-t.
Nem tudtam különböző aláírásokat reprodukálni GnuPG-vel és RSA-kulccsal, amikor fix (hamis) rendszeridőt használtam (az aláírási csomag időbélyeget tartalmaz). Csak ez az idő tűnik másnak. Nem találok utalást sem a GnuPG-re, sem a PSS-re, sem az RFC 4880-ra. Tudna részletezni egy kicsit tovább?
@JensErat: Természetesen igazad van. A különböző rendszeridők becsaptak. Szégyen rám. [RFC 4880] (http://www.ietf.org/rfc/rfc4880.txt) kijelenti, hogy az OpenPGP az [EMSA-PKCS1-v1_5] nevű kitöltési sémát használja (https://tools.ietf.org/html/rfc3447 # szakasz-9.2), ami ** determinisztikus **. Ennek megfelelően szerkesztettem a válaszomat, ezért köszönöm a hozzászólást.
Jens Erat
2014-03-24 23:11:12 UTC
view on stackexchange narkive permalink

Az RSA-val történő aláírás az OpenPGP-ben determinisztikus , ezért nem igényel forrást a véletlenszerűséghez, ahogyan helyesen leírtad. Az aláírandó adatok tárolása determinisztikus, mindaddig, amíg nem véletlenszerű maggal vannak kitöltve (lásd @ Karol Babioch válaszát a részletekért, miért akarja valaki ezt), a hash aláírása is az.

Az érintett részek részletes ismertetése:

Kipróbálhatja magát a faketime használatával a idő egy meghatározott időre (ne használjon dátumot a kulcs létrehozási ideje előtt):

  $ faketime '@ 2147483647' gpg --sign --output - somefile | gpg --print-md SHA25693C7E062 151311F2 822FBBBF FC4B061A C8F31A1A 54FDA558 61A9C964 B5107CD4  

Az idő hamisítása nélkül különböző kivonatolási értékeket kap, mint az időbélyeg változása.

Egyéb algoritmusok, lásd @Karol Babioch válaszát. Ennek a vitának a következtetése a következő lenne: Használjon RSA-t virtuális gépekbe való bejelentkezéshez vagy más alacsony entrópiajú eszközökbe (néhány beágyazott doboz, útválasztó, stb.), Mivel ez nem a véletlenszerűségtől függ; de jobb, ha máshonnan importálja a kulcspárt.


Másrészt a titkosításhoz véletlenszerű számok szükségesek az RSA-val is: a nyilvános / privát titkosítást csak a blokkolja a titkosítási kulcsot, és előfordulhat, hogy néhány kitöltést alkalmaz.

Nyilvánvaló, hogy egy új OpenPGP kulcspár létrehozása szintén véletlenszerűséget igényel.

Sajnálom, de ez egyszerűen nem igaz. Nagyon sok olyan aláíró algoritmus létezik, amelyekhez ** csak ** véletlenszerű számok szükségesek, pl. [DSA] (https://en.wikipedia.org/wiki/Digital_Signature_Algorithm) és elliptikus görbével egyenértékű [ECDSA] (https://en.wikipedia.org/wiki/Elliptic_Curve_DSA). Ugyanezen véletlenszerű szám többszöri újrafelhasználása ezekben a sémákban lehetővé teheti a támadó számára a privát kulcs helyreállítását. Erről szólt a híres [PlayStation 3 hack] (https://en.wikipedia.org/wiki/Random_number_generator_attack#PlayStation_3). Tehát állítása ** téves és veszélyes **!
Az RSA-ra kellett volna korlátoznom a választ, amelyet jelenleg a leggyakrabban használnak és ajánlanak. Frissítettem a választ az RSA-ra korlátozásra az OpenPGP-ben, ahol érvényes **. Köszönjük, hogy felhívta a figyelmet a DSA-val.
Szerintem a szerkesztett verziód most nagyon jó, és sokkal értékesebb, mint azelőtt volt.
Ez jó hely lehet a "- faked-system-time" és a "--ignore-time-konfliktus" gpg opciók megemlítésére, amelyek arra kényszeríthetik a gpg-t, hogy tetszőleges időbélyegeket használjon, és így reprodukálható aláírásokat hozzon létre.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...