24.12.2014 Views

Download - Svetlin Nakov

Download - Svetlin Nakov

Download - Svetlin Nakov

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Примерът работи както за обикновени хранилища, така и за хранилища,<br />

разположени върху смарт карта. В случая за смарт карта за достъп до<br />

личните ключове не се изисква парола, защото PIN кодът се изпраща преди<br />

това при инстанцирането на KeyStore обекта. Затова в примера за парола се<br />

подава стойност null.<br />

На пръв поглед изглежда, че личните ключове могат да се извличат от смарт<br />

картата, но на практика това не е така. Смарт картите не позволяват<br />

извличането на ключове, а само индиректен достъп до тях с цел подписване,<br />

верификация на подпис, шифриране и дешифриране. В горния пример не се<br />

извлича личният ключ, а само интерфейс за достъп до него.<br />

Подписване на данни със смарт карта<br />

След като е извлечен интерфейсът на даден личен ключ от смарт картата,<br />

той може да се използва за подписване на данни, както всеки друг личен<br />

ключ. Реално подписването става като се изчисли предварително хеш<br />

стойността на документа за подписване и се подаде тази хеш стойност на<br />

смарт картата за да го подпише тя със своя криптопроцесор. При успех<br />

картата връща изчислената сигнатура в резултат от подписването на хеш<br />

стойността. Така личният ключ не се излага на рискове, защото остава в<br />

тайна, скрит някъде в картата. Ето примерен код за подписване на данни по<br />

даден интерфейс към личен ключ, извлечен от смарт карта:<br />

private static byte[] signDocument(byte[] aDocument, PrivateKey aPrivateKey)<br />

throws GeneralSecurityException {<br />

Signature signatureAlgorithm = Signature.getInstance("SHA1withRSA");<br />

signatureAlgorithm.initSign(aPrivateKey);<br />

signatureAlgorithm.update(aDocument);<br />

byte[] digitalSignature = signatureAlgorithm.sign();<br />

return digitalSignature;<br />

}<br />

61

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!