God dag! Jag vill dela med mig av mina erfarenheter om detta Àmne.
Rutoken Àr hÄrdvaru- och programvarulösningar inom autentisering, informationsskydd och elektronisk signatur. Det Àr i grund och botten en USB-enhet som kan lagra autentiseringsdata som anvÀndaren anvÀnder för att logga in i systemet.
I detta exempel anvÀnds Rutoken EDS 2.0.
För att arbeta med denna Rutoken krÀvs det.
För Windows sÀkerstÀller installationen av enbart drivrutinen allt som behövs för att operativsystemet ska kunna se din Rutoken och arbeta med den.
Man kan interagera med Rutoken pÄ olika sÀtt. Man kan fÄ tillgÄng till den frÄn serverkomponenten av applikationen, eller direkt frÄn klientkomponenten. I detta exempel kommer interaktionen med Rutoken att behandlas frÄn klientkomponenten av applikationen.
Klientkomponenten av applikationen interagerar med Rutoken genom Rutoken-plugin. Detta Àr ett program som installeras separat pÄ varje webblÀsare. För Windows, ladda helt enkelt ner och installera plugin-programmet, .
Nu kan vi interagera med Rutoken frÄn klientkomponenten av applikationen.
I detta exempel utforskas idén om implementering av algoritmen för anvÀndarautentisering i systemet med hjÀlp av en chДllange-response-scheme.
Essensen av idén Àr följande:
- Klienten skickar en begÀran om autentisering till servern.
- Servern svarar pÄ begÀran frÄn klienten med en slumpmÀssig strÀng.
- Klienten kompletterar denna strÀng med slumpmÀssiga 32 bitar.
- Klienten signerar den mottagna strÀngen med sitt certifikat.
- Klienten skickar det kodade meddelandet till servern.
- Servern kontrollerar signaturen och fÄr den ursprungliga, okodade meddelandet.
- Servern separerar de sista 32 bitarna frÄn det mottagna, okodade meddelandet.
- Servern jÀmför det mottagna resultatet med det meddelande som skickades vid begÀran om autentisering.
- Om meddelandena Àr lika, anses autentiseringen vara framgÄngsrik.
I den ovan nÀmnda algoritmen finns begreppet certifikat. Inom ramen för detta exempel mÄste viss kryptografisk teori förstÄs. PÄ Habr finns det .
I det hÀr exemplet kommer vi att anvÀnda asymmetriska krypteringsalgoritmer. För att implementera asymmetriska algoritmer krÀvs ett nyckelpar och ett certifikat.
Nyckelparet bestÄr av tvÄ delar: en privat nyckel och en offentlig nyckel. Den privata nyckeln, som namnet antyder, mÄste hÄllas hemlig. Vi anvÀnder den för att dekryptera information. Den offentliga nyckeln kan delas med vem som helst. Denna nyckel anvÀnds för att kryptera data. PÄ sÄ sÀtt kan vilken anvÀndare som helst kryptera data med den offentliga nyckeln, men endast Àgaren av den privata nyckeln kan dekryptera denna information.
Ett certifikat Àr ett elektroniskt dokument som innehÄller information om anvÀndaren som innehar certifikatet, samt den offentliga nyckeln. Med ett certifikat kan anvÀndaren signera vilken data som helst och skicka den till en server som kan verifiera denna signatur och dekryptera datan.
För att korrekt kunna signera ett meddelande med ett certifikat mÄste det skapas pÄ rÀtt sÀtt. För detta skapas först ett nyckelpar pÄ Rutoken, och sedan bör certifikatet knytas till den offentliga nyckeln i detta nyckelpar. Certifikatet mÄste ha just den offentliga nyckel som finns pÄ Rutoken, detta Àr viktigt. Om vi bara skapar ett nyckelpar och certifikat direkt pÄ klientens del av applikationen, hur kan dÄ servern dekryptera detta krypterade meddelande? Den vet ju ingenting om varken nyckelparet eller certifikatet.
Om man dyker djupare in i detta Àmne kan man hitta intressant information pÄ internet. Det finns vissa certifieringsorgan som vi har förtroende för. Dessa certifieringsorgan kan utfÀrda certifikat till anvÀndare, som installerar dessa certifikat pÄ sin server. Efter detta, nÀr en klient kontaktar denna server, kan den se detta certifikat och ser att det har utfÀrdats av ett certifieringsorgan, vilket innebÀr att denna server gÄr att lita pÄ. Det finns ocksÄ mycket information pÄ internet om hur man gör allt rÀtt. .
Om vi ÄtergÄr till vÄr uppgift verkar lösningen uppenbar. Vi behöver pÄ nÄgot sÀtt skapa vÄrt eget certifikatutfÀrdande centrum. Men innan dess mÄste vi förstÄ vad certifikatutfÀrdande centret ska basera sig pÄ för att utfÀrda certifikat till anvÀndaren, eftersom det inte vet nÄgot om denne (till exempel hans namn, efternamn osv.). Det finns nÄgot som kallas certifikatförfrÄgan. Mer information om denna standard kan man kolla pÄ, till exempel, Wikipedia.
Vi kommer att anvĂ€nda version 1.7 â PKCS#10.
Vi kommer att beskriva algoritmen för certifikatbildning pĂ„ Rutoken (ursprungskĂ€lla â ):
- PÄ klienten skapar vi ett nyckelpar och sparar det pÄ Rutoken. (Sparandet sker automatiskt).
- PÄ klienten skapar vi en certifikatförfrÄgan.
- Vi skickar denna förfrÄgan frÄn klienten till servern.
- Vid mottagandet av certifikatförfrÄgan pÄ servern utfÀrdar vi ett certifikat via vÄrt certifikatutfÀrdande centrum.
- Vi skickar detta certifikat till klienten.
- PÄ klienten sparar vi certifikatet pÄ Rutoken.
- Certifikatet mÄste kopplas till det nyckelpar som skapades i det första steget.
Nu Àr det tydligt hur servern kan avkoda klientens signatur, eftersom den sjÀlv utfÀrdade certifikatet.
I nÀsta del kommer vi att gÄ igenom hur man stÀller in sitt eget certifikatutfÀrdande centrum baserat pÄ det fullstÀndiga kryptografiska biblioteket med öppen kÀllkod openSSL.
KĂ€lla: habr.com
