Kryptografiska standarder har två viktiga mål: att göra olika implementeringar interoperabla och att undvika diverse kända fel i typiska scheman. I den här bloggen diskuterade vi Public Key Cryptography Standard (PKCS), som har haft en betydande inverkan på användningen av kryptering med offentlig nyckel i praktiken. PKCS-standarden är en uppsättning standarder som kallas PKCS 1 till 15.
Dessa standarder omfattar RSA- kryptering, RSA-signatur, lösenordsbaserad kryptering, krypterad meddelandesyntax, syntax för privat nyckelinformation, vald objektkategori och attributtyp, syntax för autentiseringsbegäran, gränssnitt för krypteringstoken, syntax för utbyte av personlig information och grammatik för krypterad tokeninformation. RSA Laboratories publicerar PKCS-standarden.
Även om RSA Laboratories ber allmänheten om kommentarer och förslag om PKCS-standarden, förbehåller sig RSA Laboratories den exklusiva makten att besluta om alla aspekter av PKCS-standarden. PKCS har blivit grunden för många andra standarder, såsom S/MIME.
Kryptografi med publika nycklar baseras på en asymmetrisk kryptografisk algoritm som använder två relaterade nycklar, en publik nyckel och en privat nyckel. Naturen hos dessa två nycklar är att den privata nyckeln härleds, givet den publika nyckeln. Det är beräkningsmässigt ogenomförbart. Användare publicerar sina publika nycklar i publika kataloger, såsom LDAP-kataloger, och lämnar sina privata nycklar åt sig själva.
Beroende på algoritmens syfte finns det krypterings- och dekrypteringsalgoritmer med offentlig nyckel och signaturalgoritmer. Krypteringsalgoritmer kan användas för att kryptera data med en offentlig nyckel (till exempel en symmetrisk nyckel) så att endast mottagaren med motsvarande privata nyckel kan dekryptera informationen.
Typiska krypteringsalgoritmer för publika nycklar är RSA och ECIES (Elliptic Curve Integrated Encryption Scheme, se SECG 2000). Signaturalgoritmen kombineras med meddelandedigestalgoritmen, som kan konvertera meddelanden av valfri längd med hjälp av den privata nyckeln till en signatur. På så sätt kan samma signatur inte hittas beräkningsmässigt utan att känna till den privata nyckeln.
Meddelandet med standardsignaturen kan hittas, eller se signaturen för ett specifikt meddelande. Vem som helst med motsvarande offentliga nyckel kan verifiera signaturens giltighet. Typiska algoritmer för digitala signaturer med offentlig nyckel är RSA, DSA och ECDSA.
PKCS-specifikationer
| Nej. | PKCS-titel | Kommentarer |
|---|---|---|
| 1 | RSA-kryptografistandard | |
| 2 | införlivad i PKCS #1 | |
| 3 | Diffie-Hellman Key Agreement Standard | ersatt av IEEE 1363a etc. |
| 4 | Lösenordsbaserad kryptografistandard | |
| 5 | Standard för syntax för utökat certifikat | aldrig adopterad |
| 6 | Kryptografisk meddelandesyntaxstandard | ersatt av RFC 3369 (CMS) |
| 7 | Standard för syntax för privat nyckelinformation | |
| 8 | Valda objektklasser och attributtyper | |
| 9 | Standard för syntax för certifieringsbegäran | |
| 10 | Kryptografisk tokengränssnittsstandard | kallad CRYPTOKI |
| 11 | Standard för syntax för utbyte av personlig information | |
| 12 | (reserverat för ECC) | aldrig publicerats |
| 13 | (reserverad för generering av pseudoslumpmässiga tal) | aldrig publicerats |
| 14 | Standard för syntax för kryptografisk tokeninformation |
PKCS-standarder
PKCS #1: RSA-kryptografistandard
PKCS #1 v2.1 tillhandahåller standarder för implementering av RSA-algoritmbaserade kryptografiska krypteringsscheman och digitala signaturscheman med publika nycklar, med bilagor. Den definierar också motsvarande ASN.1-syntax för att representera nycklar och för att identifiera teknikerna.
RSA-algoritmens säkerhet tros baseras på svårigheten att faktorisera produkten av stora primtal. I PKCS #1 v2.1 introduceras ett multiprimtal-RSA-schema. Multiprimtal-RSA innebär att modulen inte är produkten av två primtal utan mer än två primtal. Detta används för att öka prestandan hos RSA-kryptografiska primitiver.
PKCS #3 (föråldrad): Diffie-Hellman Key Agreement Standard
PKCS #3 v1.4 beskriver en metod för att implementera Diffie-Hellman-nyckelavtalet, varigenom två parter kan komma överens om en hemlig nyckel som endast är känd för dem. PKCS #3 ersätts av den moderna behandlingen av nyckeletableringsscheman som specificeras i IEEE 1363a (2003), ANSI 9.42, ANSI X9.44, ANSI X9.63, etc.
PKCS #5: Lösenordsbaserad kryptografistandard
I många tillämpningar av kryptografi med publika nycklar är användarsäkerheten i slutändan beroende av ett eller flera hemliga textvärden eller lösenord. Till exempel krypteras en användares privata nyckel vanligtvis med ett lösenord, och den krypterade privata nyckeln förvaras på lagringsenheter. Det finns dock två grundläggande problem när det gäller lösenordstillämpning:
- Ett lösenord är inte direkt tillämpligt som nyckel till något konventionellt kryptosystem
- Lösenord väljs ofta från ett relativt litet utrymme.
Därför krävs särskild försiktighet för att försvara sig mot sökattacker. PKCS #5 tillhandahåller en generell mekanism för att uppnå förbättrad säkerhet för lösenordsbaserade kryptografiska primitiver, som täcker nyckelderiveringsfunktioner, krypteringsscheman, meddelandeautentiseringsscheman och ASN.1-syntax som identifierar teknikerna.
PKCS #6 (Historisk): Syntaxstandard för utökade certifikat
När PKCS #6 utarbetades var X.509 i version 1.0, och ingen tilläggskomponent definierades i certifikatet. Ett X.509 v3-certifikat kan innehålla information om en given entitet i tilläggskomponenten. Sedan introduktionen av X.509 v3 är statusen för PKCS #6 historisk.
PKCS #7 och RFC 3369: CMS eller kryptografisk meddelandesyntax
PKCS #7 har ersatts av IETF RFC 3369 (Housley 2002): kryptografisk meddelandesyntax (CMS), som är grunden för S/MIME-specifikationen. CMS definierar syntaxen som används för att digitalt signera, smälta, autentisera eller kryptera godtyckligt meddelandeinnehåll. CMS beskriver specifikt en inkapslingssyntax för dataskydd. Syntaxen tillåter flera inkapslingar; ett inkapslingskuvert kan kapslas inuti ett annat.
På samma sätt kan en part digitalt signera tidigare inkapslad data. I CMS-syntaxen kan godtyckliga attribut, såsom signeringstid, signeras tillsammans med meddelandeinnehållet, och andra detaljer, såsom motsignaturer, kan associeras med en signatur. En mängd olika arkitekturer för certifikatbaserad nyckelhantering (t.ex. den som definierats av IETF PKIX-arbetsgruppen) stöds i CMS.
PKCS #8: Standard för syntax för privat nyckelinformation
Säkerheten för kryptosystemet med publika nycklar är helt beroende av skyddet av de privata nycklarna. Generellt sett krypteras de privata nycklarna med ett lösenord och lagras på något lagringsmedium. Det är viktigt att ha en standard för att lagra privata nycklar för att kunna flytta privata nycklar från ett system till ett annat utan problem.
PKCS #8 v1.2 beskriver en syntax för information med privata nyckelr, inklusive en privat nyckel för vissa algoritmer för publika nyckelr, en uppsättning attribut och en syntax för krypterad information med privata nyckelr. En lösenordsbaserad krypteringsalgoritm (t.ex. en av de som beskrivs i PKCS #5) skulle kunna användas för att kryptera informationen med privata nyckelr.
PKCS #9: Valda objektklasser och attributtyper
För att stödja PKCS-definierade attribut (t.ex. för att lagra PKCS-attribut i en katalogtjänst) i katalogsystem baserade på LDAP och X.500-familjeprotokollen definierar PKCS #9 v2.0 två hjälpobjektklasser, pkcsEntity och naturalPerson. PKCS-attribut kan paketeras i dessa två objektklasser och exporteras till andra miljöer, såsom LDAP-katalogsystem.
PKCS #9 v2.0 definierar också några nya attributtyper och matchningsregler som kan användas i olika PKCS-standarder. Till exempel definierar den attributtyperna challengePassword och extensionRequest som ska användas i attributfältet PKCS #10, och den beskriver några attributtyper som ska användas i fälten signedAttrs, unsignedAttrs, unprotectedAttrs, authAttrs och unauthAttrs i PKCS #7 (CMS).
PKCS #10: Standard för syntax för certifieringsförfrågningar
PKCS #10 v1.7 specificerar syntax för certifikatförfrågningar. När en enhet vill få ett certifikat med offentlig nyckel, konstruerar enheten en certifikatförfrågan. Den skickar den till en certifieringsutfärdare , som omvandlar begäran till ett X.509-certifikat med offentlig nyckel.
En certifieringsutfärdare uppfyller begäran genom att autentisera den begärande enheten och verifiera enhetens signatur, och, om begäran är giltig, konstruera ett X.509-certifikat från det unika namnet och den offentliga nyckeln, utfärdarens namn och certifieringsutfärdarens val av serienummer, giltighetsperiod och signaturalgoritm.
Anta att certifieringsbegäran innehåller några PKCS #9-attribut. I så fall kan certifieringsutfärdaren också använda värdena i dessa attribut och annan information som certifieringsutfärdaren känner till för att konstruera X.509-certifikattillägg. PKCS #10 specificerar inte de former som certifieringsutfärdaren returnerar det nya certifikatet i.
PKCS #11: Standard för kryptografisk tokengränssnitt
PKCS #11 v2.20 specificerar ett applikationsprogrammeringsgränssnitt (API), kallat "Cryptoki", för enheter som lagrar kryptografisk information och utför kryptografiska funktioner. Cryptoki, uttalas "kryptonyckel" och är en förkortning för "kryptografiskt tokengränssnitt", följer en enkel objektbaserad metod som adresserar målen om teknikoberoende (valfri enhet) och resursdelning (flera applikationer som har åtkomst till flera enheter), och presenterar för applikationer en standardiserad, logisk vy av enheten som kallas en "kryptografisk token".
Cryptoki var från början tänkt att vara ett gränssnitt mellan applikationer och alla typer av bärbara kryptografiska enheter, såsom de som baserades på smartkort, PCMCIA-kort och intelligenta disketter. Det primära målet med Cryptoki var ett programmeringsgränssnitt på lägre nivå som abstraherar detaljerna om enheterna och presenterar för applikationen en standardmodell av den kryptografiska enheten, kallad en "kryptografisk token".
PKCS #12: Syntaxstandard för utbyte av personlig information
PKCS #12 v1.0 beskriver en överföringssyntax för personlig identitetsinformation, inklusive privata nycklar, certifikat, diverse hemligheter och tillägg. Maskiner, applikationer, webbläsare, internetkiosker och så vidare som stöder denna standard kommer att tillåta användare att importera, exportera och använda en enda uppsättning personlig identitetsinformation. PKCS #12 kan ses som en vidareutveckling av PKCS #8 genom att inkludera viktig men kompletterande identitetsinformation och privata nycklar och införa högre säkerhet genom sekretess- och integritetslägen för publika nycklar.
PKCS #15: Standard för syntax för kryptografisk tokeninformation
Kryptografiska tokens, såsom integrerade kretskort (eller IC-kort), är i sig säkra datorplattformar som är idealiska för att ge förbättrad säkerhet och integritetsfunktionalitet till applikationer. De kan hantera autentiseringsinformation såsom digitala certifikat och funktioner, auktoriseringar och kryptografiska nycklar.
Dessutom kan de tillhandahålla säker lagring och beräkningsmöjligheter för känslig information såsom privata nycklar och nyckelfragment. Samtidigt erbjuder många av dessa tokens en isolerad bearbetningsfunktion som kan använda denna information utan att exponera den i värdmiljön där den är utsatt för potentiell risk från skadlig kod (virus, trojanska hästar och så vidare). Tyvärr har användningen av dessa tokens för autentisering och auktorisering hindrats av bristen på interoperabilitet.
För det första saknar branschen standarder för att lagra ett gemensamt format för digitala autentiseringsuppgifter (nycklar, certifikat etc.) på dem. Detta har gjort det svårt att skapa applikationer som kan fungera med autentiseringsuppgifter från olika teknikleverantörer. För det andra har mekanismer som gör det möjligt för flera applikationer att dela digitala autentiseringsuppgifter effektivt ännu inte nått mognad.
Resurser
- PKCS-specifikationer
- PKCS-standarder
- PKCS #1: RSA-kryptografistandard
- PKCS #3 (föråldrad): Diffie-Hellman Key Agreement Standard
- PKCS #5: Lösenordsbaserad kryptografistandard
- PKCS #6 (Historisk): Syntaxstandard för utökade certifikat
- PKCS #7 och RFC 3369: CMS eller kryptografisk meddelandesyntax
- PKCS #8: Standard för syntax för privat nyckelinformation
- PKCS #9: Valda objektklasser och attributtyper
- PKCS #10: Standard för syntax för certifieringsförfrågningar
- PKCS #11: Standard för kryptografisk tokengränssnitt
- PKCS #12: Syntaxstandard för utbyte av personlig information
- PKCS #15: Standard för syntax för kryptografisk tokeninformation
- Resurser
