( arpad | 2025. 01. 22., sze – 14:58 )

Nem kell az egészet aláírni. Generálsz belőle egy hash-t és aláírod azt, vagy akár letitkosítod. Vagy valamilyen CRC-t. Nehogy már 256-512 bitet több erőforrás legyen aláírni, mint megabájtokat titkosítani. ? A lényeg annyi, hogy nyilvános adat ne legyen titkosítva.

Pontosan így van. Több erőforrás kell hozzá.

Csak a te kedvedért csináltam gyorsan pár mérést.

- Az SHA256 eredményét előre kiszámoltam és binárisan egy állományba került (32 byte), azaz a hash képzést nem számoltam bele a futási időbe.

- A szimmetrikus kulcsú algoritmusoknál előre megcsináltam a jelszóból a kulcsot, a saltot és az IV-t. Egy TLS session esetén ezeket is csak egyszer végzed el.

- Mértem 2048 és 4096 bites RSA kulcsokkal, illetve AES-128 és AES-256-al.

Az eredmény:

- Egy RSA-2048 signing nagyjából annyi időbe telik mint titkosítani 1MiB adatot. Mindegy, hogy AES-128 vagy AES-256.

- Egy RSA-4096 signing nagyjából kétszer annyi időbe telik mint titkosítani 1MiB adatot. Mindegy, hogy AES-128 vagy AES-256.

- Ezek alapján csak akkor éri meg signingot használni ha kevés és nagy (nagyobb mint 1MiB) állományod van ami a mai web oldalak esetén nem jellemző. Ezekben a mérésekben az nincs benne hogy miképp állítod elő a hasht szerver oldalon (amit lehet cache-elni valamilyen szinten) és hogy a kliens oldalon is újra kell számolnod azt miután feldolgoztad a választ. Ezzel így sokkal nagyobb terhelést tolsz a kliensekre mint a jelenlegi helyzetben. De legfeljebb majd újravásárolják az emberek a számítógépeiket...

A "nyers" mérés:

$ openssl dgst -binary -sha256 data.zip > hash.sha256

$ time for (( I=0; I < 1000; I++ )); do openssl pkeyutl -sign -in hash.sha256 -inkey sign-2048.pem -pkeyopt digest:sha256 -keyform PEM -out data.sign; done

real    0m6,469s
user    0m4,567s
sys     0m1,958s

$ time for (( I=0; I < 1000; I++ )); do openssl pkeyutl -sign -in hash.sha256 -inkey sign-4096.pem -pkeyopt digest:sha256 -keyform PEM -out data.sign; done

real    0m11,140s
user    0m9,230s
sys     0m1,964s

$ openssl enc -aes128 -in random.100k -pass env:PASSWORD -pbkdf2 -P

$ time for (( I=0; I<1000; I++ )); do openssl enc -aes128 -in random.100k -K C25A924B9A6D2C60890F46D6E1FF6E69 -S DAA031DFCD3D0E5E -iv 02F0A6C57C55484F273AF78C3D2AE088 -out random.100k-enc; done

real    0m4,600s
user    0m2,608s
sys     0m2,049s

$ time for (( I=0; I<1000; I++ )); do openssl enc -aes128 -in random.1m -K C25A924B9A6D2C60890F46D6E1FF6E69 -S DAA031DFCD3D0E5E -iv 02F0A6C57C55484F273AF78C3D2AE088 -out random.1m-enc; done

real    0m6,338s
user    0m3,526s
sys     0m2,621s

$ openssl enc -aes256 -in random.100k -pass env:PASSWORD -pbkdf2 -P

$ time for (( I=0; I<1000; I++)); do openssl enc -aes256 -in random.100k -K 669B503D906C355F4D60C98727059A6843B6EA7F21527D53E3B11A7F70DA6783 -S F6E271EE2CE181C7 -iv 4C482E14A915A6B48BD44DD0A23A1A88 -out random.100k-enc; done

real    0m4,470s
user    0m2,547s
sys     0m1,964s

$ time for (( I=0; I<1000; I++)); do openssl enc -aes256 -in random.1m -K 669B503D906C355F4D60C98727059A6843B6EA7F21527D53E3B11A7F70DA6783 -S F6E271EE2CE181C7 -iv 4C482E14A915A6B48BD44DD0A23A1A88 -out random.1m-enc; done

real    0m6,841s
user    0m3,929s
sys     0m2,547s