Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Криптография за уеб и мобилни разработчици

558 views

Published on

Полезна криптография за уеб и мобилни разработчици - това ще бъде една от темите на ТърновоКонф утре. Без да се задълбаваме в теория, ще разгледаме основните крипто инструменти - хеш, HMAC, подпис и (а)симетричен тайнопис и техни практични приложения като верификация на потребители, single-sign on, CSRF защита, автентикация към уеб интерфейси и прочие :)

Published in: Software
  • Be the first to comment

  • Be the first to like this

Криптография за уеб и мобилни разработчици

  1. 1. Криптография за уеб и мобилни разработчици Владимир Джувинов * ТърновоКонф 2015 * @dzhuvinov
  2. 2. Шестте крипто инструмента Генератор на случайни числа Хеш функция HMAC Асиметрично шифриране Симетрично шифриране Цифров подпис
  3. 3. Защо да се мъчим с такива неща? За да не ни хакнат както ЦИК!
  4. 4. Шест практични приложения Безопасни ID-та Потребителска верификация Потребителски сесии без база Шифриране на данни и съобщения Защитени уеб заявки, OAuth билети Външна потребителска автентикация
  5. 5. 1. Случайното число Светът на криптографията се опира на случайното число и колко непредсказуемо е то
  6. 6. 1. Случайното число … влиза в ширпотреба!
  7. 7. 1. Случайното число Полезни приложения: ● Непредсказуеми идентификатори ● CSRF защита Внимаваме за: ● Ентропия на семенцата ● Достатъчно дъъъъъъъъълго ли ни е случайното число? ● Периодично презасяване import java.security.SecureRandom; byte[] random = new byte[16]; SecureRandom.getInstance("SHA1PRNG").nextBytes(random);
  8. 8. 2. Хеш функция Криптографската хеш функция е като еднопосочна улица. Връщането назад не е желателно. Който все пак успее печели един биткойн :-)
  9. 9. 2. Хеш функция Полезни приложения: ● За проверка че не са ни барали данните в съхраниение / съобщенията в транзит ● За извеждане на ключове от пароли Внимаваме за: ● Ползваме достатъчно дълъг хеш (SHA-256+) за избягване на колизии. MD5 е отживял! ● Смесваме със солчица за предпазваме от речникови атаки import java.security.MessageDigest; byte[] hash = MessageDigest .getInstance("SHA-256") .update(saltBytes) .digest("Hello world!".getBytes("UTF-8"));
  10. 10. 3. HMAC Код за автентикация и проверка целостта на данна или съобщение. Кодът се генерира и проверява с таен ключ. Не, това не е електронен подпис! HMAC = Hash-based Message Authentication Code
  11. 11. 3. HMAC Полезни приложения: ● Потвърждение на email адрес при регистрация на потребител ● Уеб и мобилни сесии без база на сървъра ● Сигурно обвързване на заявки с обратни обаждания през браузъра (OAuth callback) ● Алтернатива на HTTP Basic автентикация, без споделяне на тайната парола Важно: ● Достатъчно дъъъъъъъълъг ли ни е HMAC ключа? 256+ бита ● Внимаваме някой да не ни гепи HMAC ключа! Всеки който има достъп до него може да създава кодове за автентикация ● Важно: HMAC няма силата на цифров подпис!
  12. 12. 4. JOSE / JWT ● Улеснява живота на разработчиците на уеб, JavaScript, мобилни и IoT приложения, които се нуждаят от HMAC, цифрови подписи и шифриране на данни и съобщения ● URL-безопасен формат (Base64URL) за предаване на защитени обекти и токени чрез HTTP връзки, форми и заглавия ● RFC 7515, 7516, 7517, 7518, 7519, 7520 JSON заглавие Товарен отсег HMAC / RSASSA / ECDSA {''alg'':''HS256''} Hello World! xxxxxxxxxxxxx
  13. 13. 4. JOSE / JWT JSON заглавие Товар HMAC {''alg'':''HS256''} Hello World! ljARfmwuxZyeQ... eyJhbGciOiJIUzI1NiJ9.SGVsbG8gd29ybGQh. ljARfmwuxZyeQj4XpccO3Rxr_g0wmoPEEbR3F_MbIkQ BASE64URL
  14. 14. 4. Java библиотеката за JOSE/JWT ● HMAC, RSA / EC подписи + шифриране и куп други крипто чудесии под Java ● Работи в приложения обслужващи над 70 милиона потребители в мрежата (OpenID Connect, OAuth) ● Десетки зубъри поддръжници и тестери ● 100% документирана ● С отворен код и Apache 2.0 лиценз http://connect2id.com/products/nimbus-jose-jwt
  15. 15. 5. Код за email потвърждение // Message: {''sub'':''alice'',''exp'':1449237518} byte[] macKey = new byte[32]; SecureRandom.getInstance("SHA1PRNG").nextBytes(macKey); JWTClaimsSet claims = new JWTClaimsSet.Builder() .subject("alice") .expirationTime(new Date(new Date().getTime() + 10*60*1000)) .build(); SignedJWT jwt = new SignedJWT(new JWSHeader(JWSAlgorithm.HS256), claims); jwt.sign(new MACSigner(macKey)); assertTrue(jwt.verify(new MACVerifier(macKey))); // eyJhbGciOiJIUzI1NiJ9.SGVsbG8gd29ybGQh.Dby-zS1BF21apXtsukTokzcU22dbXT38hx2H-R2A3G8
  16. 16. 6. Цифров подпис Доста по- функционален от обикновения подпис. Идентифицира лицето подписало документа и също гарантира неговата цялост.
  17. 17. 6. Цифров подпис Полезни приложения: ● Удостоверяване на документи, токени и съобщения ● Билет за вход (OpenID Connect - Identity token) ● Билет за достъп до уеб API (OAuth 2.0 bearer access token) Внимаваме за: ● RSA ключ поне 1024 бита, по-добре 2048 ● Пазим надеждно частния клюс, с който се подписват съобщенията ● Периодично сменяме ключовете (ротация) ● Не използваме един и същ RSA / EC ключ за подписване и шифриране
  18. 18. 7. Билет за вход { ''iss'':''https://idp.ws'', ''sub'':''alice'', ''iat'':1449237518, ''exp'':1449275518, ''roles'':[''admin'',''audit''] } import java.security.*; import java.security.interfaces.*. import com.nimbusds.jose.*; import com.nimbusds.jose.crypto.*; KeyPairGenerator rsaGen = KeyPairGenerator.getInstance("RSA"); rsaGen.initialize(2048); KeyPair rsaKeys = rsaGen.generateKeyPair(); JWTClaimsSet claims = new JWTClaimsSet.Builder() .issuer("https://idp.ws") .subject("alice") .issueTime(new Date()) .expirationTime(new Date(new Date().getTime() + 10*60*1000)) .claim("roles", Arrays.asList("admin", "audit")) .build(); SignedJWT jwt = new SignedJWT(new JWSHeader(JWSAlgorithm.RS256), claims); jwt.sign(new RSASSASigner((RSAPrivateKey) rsaKeys.getPrivate())); assertTrue(jwt.verify(new RSASSAVerifier((RSAPublicKey) rsaKeys.getPublic())));
  19. 19. 7. Билет за вход eyJhbGciOiJSUzI1NiJ9. eyJleHAiOjE0NDkyNTM1NjAsInN1YiI6ImFsaWNlIiwicm9sZXMiOlsiYWRtaW4iLCJhdWRpdCJdLCJpc3MiO iJodHRwczpcL1wvaWRwLndzIiwiaWF0IjoxNDQ5MjUyOTYwfQ. UqnmYNxbySpcP0vpAcW_eWDeYGnhpB6JiLX3AgbLiFIT96kaD5C0DV1A- 53zDPk9GLzkFiH0Da85b9hgE7tPiApdWYAPghQ_3u5nmooixHFUqyWmz-nQogWvQU- Y0vhPCGwoAp4U1onvHfnTYecZBBf1hOwidEYsFTEhtKVVApsPoSK2fScmXjXCkRydFO3XH5unYlZvyJQ13f1F DR0iXRa6L47U1csn3dagXF0n9kEaT_I188A2XdqRe_6sTfijgEg_6B- Lot24oxau2KxCzGsUByCYqWXbYobQrirEn5-YF0E-coBHKILN2TX04oKjY6do4nsnZ322Dh23KvgiXA JSON заглавие Товар RSASSA {''alg'':''RS256''} { … } ljARfmwuxZyeQ...
  20. 20. 7. Билет за вход https://my-cool-app.com/login?id_token= eyJhbGciOiJSUzI1NiJ9. eyJleHAiOjE0NDkyNTM1NjAsInN1YiI6ImFsaWNlIiwicm9sZXMiOlsiYWRtaW4iLCJhdWRpdCJdLCJpc3MiO iJodHRwczpcL1wvaWRwLndzIiwiaWF0IjoxNDQ5MjUyOTYwfQ. UqnmYNxbySpcP0vpAcW_eWDeYGnhpB6JiLX3AgbLiFIT96kaD5C0DV1A- 53zDPk9GLzkFiH0Da85b9hgE7tPiApdWYAPghQ_3u5nmooixHFUqyWmz-nQogWvQU- Y0vhPCGwoAp4U1onvHfnTYecZBBf1hOwidEYsFTEhtKVVApsPoSK2fScmXjXCkRydFO3XH5unYlZvyJQ13f1F DR0iXRa6L47U1csn3dagXF0n9kEaT_I188A2XdqRe_6sTfijgEg_6B- Lot24oxau2KxCzGsUByCYqWXbYobQrirEn5-YF0E-coBHKILN2TX04oKjY6do4nsnZ322Dh23KvgiXA Фирмен абонат (MS-AD/LDAP) Приложение HTTP пренасочване ID token
  21. 21. Благодаря! Въпроси + Отговори?

×