Digitala signaturer
Varje mjukvaruuppdatering du installerar, varje signerad PDF-fil, varje JWT-token, varje kodbekräftelse som skickas till ett stort Git-förråd, varje TLS-certifikat som låter din webbläsare lita på en webbplats – allt är verifierat med digitala signaturer. Den kryptografiska primitiva är ett av de mest användbara verktygen som modern datoranvändning har, och den svarar på en specifik fråga: kom denna exakta del av data från denna specifika enhet, oförändrad?
Hela artikeltexten finns på engelska nedan.
A digital signatur är en kryptografisk operation som bevisar att en bit data har producerats av innehavaren av en specifik privat nyckel och att data inte har ändrats sedan dess. Det är den digitala analogen av en handskriven signatur på papper, men med mycket starkare garantier: signaturen är matematiskt bunden till data, och det är beräkningsmässigt omöjligt att förfalska den utan den privata nyckeln. undertecknaren innehar motsvarande privata nyckel.
Hur signering faktiskt fungerar
Den naiva idén - "kryptera data med den privata nyckeln" - fångar andan men inte detaljerna. Verkliga signaturscheman hash data först och utför sedan en signeringsoperation på hashen. Hashing är viktigt: signeringsoperationer är långsamma och fungerar på små indata, men data som signeras kan vara megabyte eller gigabyte. Hashen komprimerar data av godtycklig storlek till en sammanfattning av fast storlek, som sedan signeras.
Flödet:
- Compute
h = SHA-256(data)(eller en annan säker hash-nyckel med PLZ3X2S:XX3n privat nyckel med PLZ3X2S).sig = sign(h, priv). - Distribute (data, sig).
För att verifiera:
- Compute
h' = SHA-256(data). - Verify
verify(h', sig, pub) == true.
Om något i data ändras kommer h' att skilja sig från h, och verifieringen misslyckas. Om signaturen skapades av någon annan än innehavaren av den matchande privata nyckeln, misslyckas verifieringen.
Gemensamma signaturalgoritmer
- RSA med PSS eller PKCS#1 v1.5 utfyllnad — äldre men fortfarande allmänt utplacerade. PSS är den moderna rekommendationen.
- ECDSA på NIST-kurvor (P-256, P-384) — vanligt i TLS och kodsignering.
- Ed25519 — modernt säkerhets- och signaturschema. Nu standard i OpenSSH, Signal, många TLS-distributioner.
- SLH-DSA, ML-DSA — post-quantum signaturscheman; standardiserad av NIST 2024 (SLH-DSA är hash-baserad / SPHINCS+, ML-DSA är gitterbaserad / CRYSTALS-Dilithium).
Där du stöter på digitala signaturer
- XPLZ87LSXT7PLZ är varje certifikat signerat av ett 72XXPLZ-certifikat. Certifikatmyndighetens privata nyckel, som garanterar bindningen mellan en domän och en offentlig nyckel.
- Programuppdateringar. Operativsystem och pakethanterare verifierar signaturer på nedladdade paket innan installation. macOS, Windows, Debian, Arch – alla avvisar osignerade paket från officiella kanaler.
- Code signering. Authenticode (Windows), Apple Developer ID, Android APK-signering – signaturer binder körbara filer till sina utvecklare. XPLZ89GXXPLZcom19. SSH-baserade signaturer på commits och taggar; GitHub visar "Verified."
- JWT och OAuth-tokens. Identitetspåståenden undertecknade av en utfärdande myndighet.
- Cryptocurrency-transaktioner. Varje Bitcoin- eller Ethereum-transaktion är undertecknad av ägarens transaktioner. nyckel.
- Signerade PDF-filer och e-postmeddelanden. S/MIME, PAdES och PGP-signerade meddelanden.
Nyckelhantering är den svåra delen
XPLZ108Kryptografin löses. Den operativa utmaningen är att skydda och rotera privata nycklar utan avbrott i tjänsten. En läckt kodsigneringsnyckel är katastrofal – angripare kan signera godtycklig skadlig programvara som operativsystemet kommer att lita på. Moderna bästa praxis:- Generera privata nycklar inuti hårdvarusäkerhetsmoduler (HSM) — nyckeln existerar aldrig utanför det dedikerade chipet.
- Separat signeringsnycklar från långsiktiga identitetsnycklar (offline rot, online mellanliggande signering1415). schema; publicera återkallelse när den äventyras.
- Gör varje signeringsåtgärd.
Verifiera signaturer korrekt
Ttre subtila fallgropar som har orsakat riktiga CVE:
- Verifiera fel nyckel. En signatur är bara så pålitlig som din anledning att tro att den offentliga nyckeln är den rätta. Out-of-band-verifiering, nyckeltransparensloggar eller trust-on-first-use är de praktiska svaren.
- Tlitar på algoritmfältet. Vissa token-format (tidigt JWT) låter undertecknaren specificera algoritmen. Angripare utnyttjade detta genom att hävda "alg=none" och helt förbi signaturverifiering. Verifieraren måste fästa den förväntade algoritmen.
- Flytande att verifiera signaturen täcker rätt data. En signatur på en hash av dokumentet bevisar ingenting om du kan byta vilket dokument som presenteras för vilken signatur.
Done finns på den moderna signaturen. Internet.
Vanliga frågor
- Hur skiljer sig en digital signatur från kryptering?
- Kryptering håller data konfidentiell. Signering bevisar datas ursprung och integritet men döljer den inte. Många protokoll kombinerar båda: kryptera för att hålla innehållet privat, signera för att bevisa äkthet. De använder olika nycklar, ofta olika algoritmer.
- Kan en digital signatur förfalskas?
- Inte utan den privata nyckeln. Den kryptografiska styrkan är densamma som den underliggande primitiva (Ed25519 är i praktiken oförglömlig). De realistiska förfalskningsvägarna: att stjäla den privata nyckeln, utnyttja svaga slumptalsgeneratorer under signering (ECDSA:s klassiska felläge) eller signera fel sak genom en verifieringsbugg.
- Varför hashar vi innan vi signerar istället för att signera data direkt?
- Två anledningar: signering är långsam på stora ingångar och signaturalgoritmer har gränser för meddelandestorlek. Hashen komprimerar godtycklig data till ett värde med fast storlek som algoritmen kan signera effektivt. Säkerhetsegenskapen gäller eftersom hashfunktionen är kollisionsbeständig.
- Vad är skillnaden mellan en digital signatur och en elektronisk signatur?
- Elektronisk signatur är den juridiska termen - alla märken som indikerar samtycke eller författarskap, inklusive att skriva ditt namn. Digital signatur är den kryptografiska termen - en specifik matematisk operation. Många elektroniska signaturer har ingen kryptografi; många digitala signaturer känns inte igen i domstol utan ytterligare ceremoni. De två termerna överlappar varandra men är inte synonymer.
- Bevisar en digital signatur det datum då ett dokument undertecknades?
- Inte på egen hand. Du behöver en separat <em>trusted timestamp</em> från en Time Stamping Authority, eller en notarisering via en offentlig tidsstämplingstjänst (OpenTimestamps skriver till Bitcoins blockchain). Enbart undertecknande bevisar att "denna signatur producerades någon gång tidigare", inte vid någon specifik tidpunkt.