SIGNEDSHA-256 digest signed with Ed25519

Semnături digitale

10 min citireCriptografie

Fiecare actualizare de software pe care o instalați, fiecare PDF semnat, fiecare token JWT, fiecare cod commit trimis într-un depozit Git major, fiecare certificat TLS care permite browserului dvs. să aibă încredere într-un site web - toate sunt verificate cu semnături digitale. Primitiva criptografică este unul dintre cele mai utile instrumente de care dispune computerul modern și răspunde la o întrebare specifică: această bucată exactă de date a provenit de la această entitate specifică, nemodificată?

Întregul articol al articolului este oferit în limba engleză mai jos.

A Semnătura digitală este o operațiune criptografică care demonstrează că o bucată de date a fost produsă de deținătorul unei anumite chei private și că datele nu au mai fost modificate de atunci. Este analogul digital al unei semnături scrise de mână pe hârtie, dar cu garanții mult mai puternice: semnătura este legată matematic de date, iar falsificarea acesteia fără cheia privată este imposibil din punct de vedere computațional. deține cheia privată corespunzătoare.

  • Integrity — orice modificare a datelor semnate invalidează semnătura.
  • Non-repudiation — semnatarul nu poate nega în mod credibil ulterior că a semnat, deoarece deținătorul cheii publice poate verifica doar cheia publică semnătură.
  • Cum funcționează de fapt semnarea

    Ideea naivă — „criptați datele cu cheia privată” — captează spiritul, dar nu detaliile. Schemele de semnătură reale hash datele mai întâi, apoi efectuează o operație de semnare pe hash. Hashingul este esențial: operațiunile de semnare sunt lente și funcționează pe intrări mici, dar datele semnate pot fi megabytes sau gigabytes. Hash-ul comprimă datele de dimensiuni arbitrare într-un rezumat de dimensiuni fixe, care este apoi semnat.

    Fluxul:

    1. Calculează h = SHA-256(date) (sau alt hash securizat).
    2. PLZ32S cheie privată. sig = semn(h, priv).
    3. Distribuie (date, semn).

    TPentru a verifica:

    1. Calculează h' = SHA-256PLZ44

      PLZ41X

      Verificați verify(h', sig, pub) == true.

    IDacă s-a modificat ceva din date, h' va fi diferit de h, iar verificarea eșuează. Dacă semnătura a fost produsă de altcineva decât deținătorul cheii private corespunzătoare, verificarea eșuează.

    Algoritmi comuni de semnătură

    • RSA cu PSS sau PKCS#1 v1.5 padding — mai vechi, dar încă implementați pe scară largă. PSS este recomandarea modernă.
    • ECDSA pe curbele NIST (P-256, P-384) — comună în TLS și semnarea codului.
    • Ed25519 — schemă modernă de semnătură concepută pentru siguranță și viteză. Acum, implicit în OpenSSH, Signal, multe implementări TLS.
    • SLH-DSA, ML-DSA — scheme de semnătură post-cuantică; standardizat de NIST în 2024 (SLH-DSA este bazat pe hash / SPHINCS+, ML-DSA este pe bază de rețea / CRYSTALS-Dilithium).

    Unde întâlniți semnături digitale

        • XPLZ9 certificateX. Cheia privată a autorității, care garantează legătura dintre un domeniu și o cheie publică.
        • Actualizări software. Sistemele de operare și managerii de pachete verifică semnăturile pachetelor descărcate înainte de instalare. macOS, Windows, Debian, Arch — toate resping pachetele nesemnate de pe canalele oficiale. semnături pe comite și etichete; GitHub afișează „Verificat”.
        • JWT și jetoane OAuth. Afirmații de identitate semnate de o autoritate emitentă.
        • Tranzacții cu criptomonede. Fiecare tranzacție Bitcoin sau Ethereum este semnată de proprietarul Bitcoin sau Ethereum. cheie.
        • PDF-uri și e-mailuri semnate. Mesaje S/MIME, PAdES și PGP semnate.

        Gestionarea cheilor este partea grea

        Criptografia este rezolvată. Provocarea operațională este protejarea și rotația cheilor private fără întrerupere a serviciului. O cheie de semnare a codului scurs este catastrofală - atacatorii pot semna programe malware arbitrare în care sistemul de operare va avea încredere. Cele mai bune practici moderne:

        • Generează chei private în modulele de securitate hardware (HSM) — cheia nu există niciodată în afara cipul dedicat.
        • Separați cheile de semnare de cheile de identitate pe termen lung (rădăcină offline, semnare intermediară online). publicați revocarea atunci când este compromis.
        • Audit fiecare operațiune de semnare.

        Verificarea corectă a semnăturilor

        Trei capcane subtile care au cauzat CVE reale:

        • Verificarea cheii greșite. O semnătură este la fel de demnă de încredere ca și motivul dvs. de a crede că cheia publică este cea corectă. Verificarea în afara benzii, jurnalele de transparență a cheilor sau încrederea la prima utilizare sunt răspunsurile practice. Atacatorii au exploatat acest lucru pretinzând „alg=none” și ocolind în întregime verificarea semnăturii. Verificatorul trebuie să pinizeze algoritmul așteptat.
        • Eșecul de a verifica semnătura acoperă datele corecte. O semnătură pe un hash al documentului nu dovedește nimic dacă puteți schimba ce document este prezentat cu care semnătură.

        Gesit corect, Internetul modern XPL1 de încredere.XPL1 sunt de încredere.

    Întrebări frecvente

    Cum este o semnătură digitală diferită de criptare?
    Criptarea păstrează confidențialitatea datelor. Semnarea dovedește originea și integritatea datelor, dar nu o ascunde. Multe protocoale combină ambele: criptează pentru a păstra conținutul privat, semnează pentru a dovedi autenticitatea. Ei folosesc chei diferite, adesea algoritmi diferiți.
    Se poate falsifica o semnătură digitală?
    Nu fără cheia privată. Puterea criptografică este aceeași cu primitiva subiacentă (Ed25519 este în esență de nefalsificat în practică). Căile realiste de falsificare: furtul cheii private, exploatarea generatoarelor slabe de numere aleatoare în timpul semnării (modul clasic de eșec al ECDSA) sau semnarea unui lucru greșit printr-un bug de verificare.
    De ce facem hash înainte de a semna în loc să semnăm datele direct?
    Două motive: semnarea este lentă pentru intrări mari, iar algoritmii de semnătură au limite pentru dimensiunea mesajului. Hash-ul comprimă datele arbitrare într-o valoare de dimensiune fixă ​​pe care algoritmul o poate semna eficient. Proprietatea de securitate este valabilă deoarece funcția hash este rezistentă la coliziuni.
    Care este diferența dintre o semnătură digitală și o semnătură electronică?
    Semnătura electronică este termenul legal - orice marcă care indică consimțământul sau calitatea de autor, inclusiv introducerea numelui. Semnătura digitală este termenul criptografic - o operație matematică specifică. Multe semnături electronice nu au criptografie; multe semnături digitale nu sunt recunoscute în instanță fără o ceremonie suplimentară. Cei doi termeni se suprapun, dar nu sunt sinonimi.
    O semnătură digitală dovedește data la care a fost semnat un document?
    Nu pe cont propriu. Aveți nevoie de un <em>trusted timestamp</em> separat de la o Autoritate de marcare a timpului sau o autentificare printr-un serviciu public de marcare temporală (OpenTimestamps scrie în blockchain-ul Bitcoin). Doar semnarea dovedește că „această semnătură a fost produsă la un moment dat înainte de acum”, nu la un moment anume.
    Semnăturile digitale explicate: Autenticitatea și non-repudierea într-o singură operațiune criptografică