Cryptology Academy · Lektion

Google Tink: säker kryptografi på hög nivå

Använd Tinks keyset-baserade API för vanliga kryptografiska operationer utan djupgående kryptografisk expertis.

Lektion 3 av 413 steg

Google Tink: säker kryptografi på hög nivå är en gratis lektion i Cryptology Academy på CoddyKit. Detta är lektion 3 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.

Översikt över Tink och dess syfte

Tink är ett kryptografiskt bibliotek med öppen källkod som utvecklats av Googles kryptografiteam och utformats för att erbjuda säker och lättanvänd kryptografi. Det främsta syftet är att förhindra vanliga mönster för felaktig kryptografianvändning, som förekommer även hos erfarna utvecklare som använder lågnivåbibliotek. Tinks API är utformat så att den korrekta operationen är det enklaste alternativet, vilket gör det svårt att oavsiktligt skapa osäkra konfigurationer.

Abstraktion baserad på keyset

Tink organiserar nycklar i keysets i stället för att exponera enskilda nyckelobjekt. Program arbetar med keyset-handtag, inte med råa nyckelbyte. Denna abstraktion förhindrar oavsiktlig exponering av nycklar, möjliggör smidiga nyckelrotationer och gör att nycklar kan lagras i fjärranslutna Key Management Systems utan att programmet någonsin behöver se nyckelmaterialet direkt. Begreppet keyset är centralt i Tinks säkra design.

AEAD-gränssnittet

AEAD-gränssnittet (Authenticated Encryption with Associated Data) i Tink tillhandahåller krypterings- och dekrypteringsoperationer. AeadFactory.getPrimitive(keyset) returnerar ett Aead-objekt; när ni anropar aead.encrypt(plaintext, associatedData) returneras ett chiffertextvärde. Tink väljer automatiskt krypteringsalgoritm utifrån keyset (till exempel AES-256-GCM) och genererar en slumpmässig nonce. Gränssnittet döljer alla algoritmdetaljer, nonce-hantering och formatkodning.

MAC-gränssnittet

Tinks MAC-gränssnitt tillhandahåller åtgärder för att beräkna och verifiera meddelandeautentiseringskoder. MacFactory.getPrimitive(keyset) returnerar ett Mac-objekt. mac.computeMac(data) returnerar autentiseringstaggen och mac.verifyMac(tag, data) verifierar den genom att kasta ett säkerhetsundantag om verifieringen misslyckas. Standardalgoritmen är HMAC-SHA256. Gränssnittet förhindrar vanliga misstag, till exempel att jämföra MAC-värden med vanlig stränglikhet i stället för med en jämförelse i konstant tid.

Gränssnittet för digitala signaturer

Tink tillhandahåller separata gränssnitt, PublicKeySign och PublicKeyVerify, för digitala signaturer. Signerings- och verifieringsobjekten härleds från olika nyckeluppsättningshandtag (privata respektive publika), vilket förhindrar att en privat nyckel av misstag används för verifiering eller tvärtom. Tinks implementationer av Ed25519 och ECDSA P-256 är standardalternativen, och deterministisk ECDSA finns tillgängligt för att undvika sårbarheter kopplade till slumpmässighet.

Gränssnittet för hybridkryptering

Tinks gränssnitt HybridEncrypt och HybridDecrypt implementerar ECIES (Elliptic Curve Integrated Encryption Scheme). Hybridkryptering kombinerar asymmetriskt nyckelutbyte med symmetrisk kryptering: avsändaren genererar en tillfällig nyckel, utför ECDH med mottagarens publika nyckel, härleder en symmetrisk nyckel och krypterar med AEAD. Detta gör det möjligt att kryptera stora meddelanden med asymmetriska nycklar utan den overhead som ren asymmetrisk kryptering medför.

Processen för nyckelrotation

Nyckelrotation i Tink är säker och bakåtkompatibel. Rotera nycklar genom att generera en ny nyckel och lägga till den i nyckeluppsättningen, markera den nya nyckeln som primär (framtida krypteringar använder den) och behålla gamla nycklar i nyckeluppsättningen för dekryptering av befintlig chiffertext. Gammal chiffertext kan fortfarande dekrypteras eftersom icke-primära nycklar förblir tillgängliga för dekryptering. När all gammal chiffertext har krypterats om eller löpt ut kan de gamla nycklarna tas bort från nyckeluppsättningen.

Serialisering av nyckeluppsättningar

Tinks nyckeluppsättningar serialiseras i JSON- eller binärt Protocol Buffer-format. JSON-formatet är läsbart för människor och användbart vid felsökning. Det binära formatet är mer kompakt i produktion. Serialiserade nyckeluppsättningar som innehåller privata nycklar måste krypteras innan de lagras. Tink stöder lagring av krypterade nyckeluppsättningar med vanlig symmetrisk AEAD-kryptering eller genom att delegera lagringen till en KMS.

KMS-integrering för kryptering av nyckeluppsättningar

Tink integreras med större KMS-leverantörer: AWS KMS, Google Cloud KMS och HashiCorp Vault. I stället för att kryptera nyckeluppsättningar med en lokal AEAD-nyckel omsluter Tink nyckeluppsättningens krypteringsnyckel med KMS. Den faktiska krypteringen av nyckeluppsättningen använder en lokalt genererad Data Encryption Key (DEK), och DEK krypteras av KMS Key Encryption Key (KEK). Detta följer mönstret för kuvertkryptering som används av molnleverantörer.

Streaming-AEAD för stora filer

Standard-AEAD kräver att hela meddelandet läses in i minnet vid kryptering och dekryptering. Tinks Streaming AEAD-gränssnitt krypterar stora filer i segment, vilket möjliggör streamingkryptering och streamingdekryptering utan att hela klartexten behöver buffras. Varje segment autentiseras separat, och segmentens ordning och fullständighet verifieras under dekrypteringen. Detta är nödvändigt för att kryptera säkerhetskopior, videor och andra stora filer.

Språkstöd och ekosystem

Tink finns för Java, Python, Go och C++ med idiomatiska API:er för varje språk. Kompatibilitet mellan språk garanteras: en fil som krypterats med Tink i Python kan dekrypteras med Tink i Java. Detta gör Tink lämpligt för system med flera tjänster i olika språk som behöver utbyta krypterade data. Tink integreras även med Protocol Buffers för typsäker konfiguration av nyckeluppsättningar.

Rotation av Tinks nyckeluppsättningar

Vad händer under Tinks nyckelrotation med chiffertext som krypterats med den gamla, icke-primära nyckeln?

Sammanfattning av Google Tink

Sammanfattning av Tink: den nyckeluppsättningsbaserade abstraktionen förhindrar att råa nycklar exponeras, AEAD-gränssnittet döljer hantering av nonce-värden och val av algoritm, MAC-gränssnittet använder verifiering i konstant tid internt, gränssnitten för digitala signaturer och hybridkryptering förhindrar felaktig användning av gränssnitt, nyckelrotation är bakåtkompatibel (gamla nycklar dekrypterar tills de tas bort), KMS-integrering följer mönstret för kuvertkryptering, Streaming AEAD hanterar stora filer och kompatibilitet mellan språk garanteras.

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 ”Google Tink: säker kryptografi på hög nivå” gratis?

Ja – hela texten till ”Google Tink: säker kryptografi på hög nivå” 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 ”Google Tink: säker kryptografi på hög nivå”?

Använd Tinks keyset-baserade API för vanliga kryptografiska operationer utan djupgående kryptografisk expertis. 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 3 av 4.

Hur lång tid tar lektionen ”Google Tink: säker kryptografi på hög nivå”?

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