Cryptology Academy · Lektion

libsodium: ett kryptobibliotek som motverkar felanvändning

Utforska libsodiums tydligt vägledande API, som gör det svårt att välja osäkra parametrar.

Lektion 1 av 413 steg

libsodium: ett kryptobibliotek som motverkar felanvändning är en gratis lektion i Cryptology Academy på CoddyKit. Detta är lektion 1 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Cryptology Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Cryptology Academy innehåller totalt 4 lektioner.

libsodiums filosofi och ursprung

libsodium skapades av Frank Denis som en portabel, plattformsoberoende version av biblioteket NaCl (Networking and Cryptography library), som utvecklades av Daniel Bernstein, Tanja Lange och Peter Schwabe. Kärnfilosofin är att göra korrekt kryptografisk användning så enkel som möjligt och felaktig användning så svår som möjligt. Säkra standardinställningar, enkla API:er och genomtänkta algoritmval förebygger de vanliga misstag som plågar bibliotek på lägre nivå.

Autentiserad kryptering med hemlig nyckel

crypto_secretbox tillhandahåller autentiserad kryptering med hemlig nyckel med hjälp av XSalsa20-Poly1305. API:t tar emot ett meddelande, en nonce på 24 byte (slumpmässigt genererad) och en nyckel på 32 byte. Resultatet är ett chiffertextvärde som både är krypterat och autentiserat. crypto_secretbox_open dekrypterar och verifierar autentiseringstaggen atomiskt och returnerar ett fel om manipulation upptäcks. Detta förhindrar dekryptering av skadade eller skadligt ändrade chiffertextvärden.

Autentiserad kryptering med publik nyckel

crypto_box tillhandahåller autentiserad kryptering med publik nyckel mellan två parter med hjälp av X25519-XSalsa20-Poly1305. Med avsändarens privata nyckel och mottagarens publika nyckel krypterar och autentiserar funktionen meddelandet, så att endast den avsedda mottagaren kan dekryptera det och mottagaren kan verifiera avsändarens identitet. crypto_box_seal är den anonyma varianten: avsändaren döljs och endast kryptering, inte autentisering av avsändaren, tillhandahålls.

Digitala signaturer med Ed25519

crypto_sign implementerar digitala signaturer med Ed25519. Nyckelgenereringen skapar en privat nyckel på 64 byte (egentligen ett seed sammanfogat med den publika nyckeln) och en publik nyckel på 32 byte. Signeringen skapar en signatur på 64 byte. Verifieringen är snabb och utförs i konstant tid. Ed25519-signaturer är deterministiska (samma meddelande och nyckel ger alltid samma signatur), vilket eliminerar de sårbarheter vid fel i slumpgenereringen som påverkade ECDSA i vissa implementationer.

Hashning med BLAKE2b

crypto_generichash tillhandahåller hashning för allmänna ändamål med BLAKE2b. Till skillnad från SHA-256 kräver BLAKE2b ingen separat HMAC-konstruktion för nycklad hashning, utan accepterar en valfri nyckel direkt. Längden på resultatet kan konfigureras från 16 till 64 byte. BLAKE2b är snabbare än SHA-256 och SHA-512 på moderna 64-bitarsprocessorer och ger samtidigt likvärdiga eller bättre säkerhetsegenskaper.

Nyckelhärledning med BLAKE2b

crypto_kdf tillhandahåller nyckelhärledning från en huvudnyckel med hjälp av BLAKE2b. Med en huvudnyckel på 32 byte, en kontextsträng (8 byte som identifierar ändamålet) och ett undernyckel-ID (ett 64-bitars tal) härleds en kryptografiskt oberoende undernyckel med konfigurerbar längd. Detta gör det möjligt att härleda flera oberoende nycklar från en enda huvudnyckel för olika ändamål, utan någon korrelation mellan de härledda nycklarna.

Hashning av lösenord med Argon2id

crypto_pwhash tillhandahåller lösenordshashning med Argon2id, vinnaren i Password Hashing Competition. Argon2id kombinerar minneskrävande beräkningar (som motverkar GPU-attacker) med tidskrävande beräkningar (som motverkar ASIC-attacker). Parametrarna omfattar en operationsgräns (tidskostnad) och en minnesgräns, som kan anpassas efter säkerhetskraven. crypto_pwhash_str skapar en standardsträng lämplig för lagring, som innehåller algoritmen och parametrarna.

Förseglade boxar för anonym kryptering

crypto_box_seal krypterar ett meddelande till en mottagare utan att avslöja avsändaren. Funktionen genererar ett tillfälligt, efemärt nyckelpar, genomför ett nyckelutbyte med mottagarens publika nyckel och kasserar sedan den efemära privata nyckeln. Mottagaren kan dekryptera med sin privata nyckel men kan inte identifiera avsändaren. Detta lämpar sig för anonyma inskickningssystem och enkelriktade krypterade kanaler.

libsodium-bindningar för olika programmeringsspråk

libsodium har bindningar för praktiskt taget alla större programmeringsspråk. PyNaCl tillhandahåller idiomatiska Python-bindningar med Python-liknande undantag och bytes-objekt. libsodium-wrappers tillhandahåller JavaScript/Node.js-bindningar (WASM för webbläsare). libsodium.js är en implementation i ren JavaScript. Kvaliteten på bindningarna varierar: föredra officiella bindningar eller bindningar som underhålls brett och omsluter C-biblioteket, i stället för att implementera algoritmerna på nytt.

Jämförelse med OpenSSL:s lågnivå-API

OpenSSL:s lågnivå-API kräver uttryckliga beslut om algoritmer, nyckelstorlekar, lägen, utfyllnad och hantering av IV. Felaktiga kombinationer accepteras utan felmeddelande. libsodium tillhandahåller en enda korrekt implementation per användningsområde utan krav på konfiguration. För kryptering med OpenSSL behöver ni till exempel välja chiffer, läge, nyckelhärledning, IV-generering och utfyllnad. Med libsodium:s crypto_secretbox anger ni en nyckel, en nonce och ett meddelande, så hanteras resten korrekt.

Välja libsodium för nya projekt

libsodium är den rekommenderade utgångspunkten för alla projekt som kräver kryptografiska operationer i språk som stöds. Det begränsade API:t minskar risken för felaktig användning, algoritmerna är moderna och välanalyserade, och C-implementationen fungerar på flera plattformar och är grundligt testad. Att byta till ett lågnivåbibliotek som OpenSSL bör endast vara nödvändigt när ni behöver specifika algoritmer som inte finns i libsodium eller kräver FIPS 140-2-validering.

Operationer i libsodium

Vilken libsodium-funktion bör ni använda för att hasha ett lösenord inför lagring i en databas?

Sammanfattning av libsodium

Sammanfattning av libsodium: säkra standardinställningar och ett API som är svårt att använda fel, byggt på NaCl-primitiver av Bernstein med flera, crypto_secretbox för kryptering med hemlig nyckel (XSalsa20-Poly1305), crypto_box för kryptering med publik nyckel (X25519), crypto_sign för Ed25519-signaturer, crypto_generichash för BLAKE2b-hashning, crypto_pwhash för Argon2id-lösenordshashning, förseglade boxar för anonym kryptering samt språkbindningar för de flesta större plattformar.

Gratis att börja

Lär dig Cryptology Academy med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
67
Lektioner
261

Vanliga frågor

Är lektionen ”libsodium: ett kryptobibliotek som motverkar felanvändning” gratis?

Ja – hela texten till ”libsodium: ett kryptobibliotek som motverkar felanvändning” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Cryptology Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Cryptology Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”libsodium: ett kryptobibliotek som motverkar felanvändning”?

Utforska libsodiums tydligt vägledande API, som gör det svårt att välja osäkra parametrar. Ni övar på Cryptology Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Cryptology Academy?

Du behöver inga förkunskaper. Utbildningen i Cryptology Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.

Hur lång tid tar lektionen ”libsodium: ett kryptobibliotek som motverkar felanvändning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Cryptology Academy-lektionen?

Ja. Varje Cryptology Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. libsodium: ett kryptobibliotek som motverkar felanvändning
  2. OpenSSL API: centrala strukturer och fallgropar
  3. Google Tink: säker kryptografi på hög nivå
  4. Granskning och val av kryptografiska beroenden
← Tillbaka till Cryptology Academy