750 likes | 1.03k Views
Drošība / Security. Ievads. Pašā sakumā datortīklus pamata izmantoja universitātes pētnieki e-pasta rakstīšanai un korporatīvie darbinieki printeru koplietošanai Tādos apstākļos par drošību daudz nedomāja... Tagad miljoni cilvēku izmanto Internetu, lai Pārvaldīt banka rēķinus
E N D
Ievads • Pašā sakumā datortīklus pamata izmantoja universitātes pētnieki e-pasta rakstīšanai un korporatīvie darbinieki printeru koplietošanai • Tādos apstākļos par drošību daudz nedomāja... • Tagad miljoni cilvēku izmanto Internetu, lai • Pārvaldīt banka rēķinus • Aizpildīt nodokļu deklarācijas • Iepirkties e-veikalos • Līdz ar to problēma kļūst ļoti aktuāla!
Pakrāpēji • Visvairāk drošības problēmas rādās ļaundarīgu personu dēļ, kuri mēģina iegūt labumu sev, jeb kaitēt citiem • Pakrāpēju kategorijas: • Students - intereses pēc • Biznesmenis - uzzināt konkurentu plānus • Afērists - nozagt kredītkaršu numurus • Spiegs - nozagt pretinieka militāru informāciju
Drošības problēmas Drošības problēmas var sadalīt četros apgabalos: • Slepenums • Lai informācija nenokļūtu pie ne-autorizēta lietotāja • Autentifikācija • Lietotāja identitātes noskaidrošana • Saistību izpildīšanas stingrā nodrošināšana • Digitālais paraksts • Integritātes nodrošināšana • Atklāt gadījumus, kad informācija ceļā ir modificēta
TCP/IP protokolu steks Tīklu drošība ir tāds aspekts, kurš aptver visus TCP/IP modeļa protokolu līmeņus
IPsec • A suite of protocols for securing Internet Protocol (IP) communications by authenticating and/or encrypting each IP packet in a data stream • Operates at the network layer of the TCP/IP model • For an application to use IPsec no code change is required • Mandatory part of IPv6 (mandatory to implement, not mandatory to use), optional for use with IPv4
Informācijas drošības pamati Visos līmeņos (izņemot fizisko) informācijas aizsardzība balstās uz KRIPTOGRĀFIJAS
Kriptogrāfijas pamati • Kriptogrāfija – nogrieķu: • κρυπτός kryptós“noslēpts" • γράφω gráfo“rakstīt" • Kriptogrāfijai ir gara un krāsaina vēsture
Kriptogrāfijas pamatjēdzieni • Šifrēšana / Atšifrēšana • Atklāts teksts [šifrs] Šifrēts teksts • Šifrs – algoritmu pāris, ar kuriem var šifrēt/atšifrēt • Atslēga – slepens (mainīgais) parametrs • Kerkgofa (Kerckhoff) princips [1883]: • Šifrēšanas algoritmi ir atklāti, • tikai atslēgas ir slepenas
Kriptogrāfiskie algoritmi Kriptogrāfiskie algoritmi sadalās divās grupās: • Algoritmi ar simetrisku atslēgu • AES (Rjindael) • DES (tripple-DES) • RC4 • Algoritmi ar publisku atslēgu • RSA • Diffie-Hellman
Algoritmi ar simetrisku atslēgu • Viena atslēga tiek izmantota gan šifrēšanai, gan atšifrēšanai • Sadalījums: • Stream ciphers • Iešifrē ziņojuma bitus pa vienam • Block ciphers • Iešifrē bitu blokus (64-256 biti vienā blokā) • Priekšrocība: Strādā daudz ātrāk nekā publiskās atslēgas algoritmi • Trūkums: Atslēgas pārvaldība
AES (Rjindael) • Advanced Encryption Standard: Simetriskais bloku šifrs, kuru ASV valdība izvēlējas par šifrēšanas standartu (2002) • Aizvietoja DES algoritmu, kurš bija atzīts par nedrošu • Algoritma struktūra: Substitūciju-permutāciju tīkls • Bloka izmērs: 128 biti • Atslēgas garums: 128, 192 vai 256 biti
AES vienas iterācijas soļi 1 3 2 4 http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
Algoritmi ar publisku atslēgu • 1976. gadā Stenfordas universitātes pētnieki Diffie un Hellman piedāvāja radikāli jaunu kriptosistēmu –šifrēšanas un atšifrēšanas atslēgas bija dažādas! • Publiskās atslēgas kriptogrāfijas pamata principi: • Šifrēšanas atslēga ir publiska • Atšifrēšanas atslēga ir privāta un to praktiski nevar iegūt no publiskās atslēgas • Lietojumi: • Sazināšanas konfidencialitāte • Digitālais paraksts
Darbības principi http://en.wikipedia.org/wiki/Public-key_cryptography
RSA • Izvēlēties divus lielus skaitļus p un q • Aprēķināt n=pq un z=(p-1)(q-1) • Izvēlēties skaitļi d, kas ar z ir savstarpēji pirmskaitļi • Atrast tādu skaitļi e, lai de=1(mod z) Lai iešifrēt ziņojumu P izmanto formulu: Lai atšifrēt atpakaļ:
Digitālais paraksts • Lai elektroniskie ziņojumi varētu aizvietot fiziskus dokumentus ir nepieciešams atrisināt paraksta jautājumu • Ir vajadzīga tāda ziņojumu sūtīšanas sistēma, lai: • Saņēmējs varētu pārbaudīt sūtītāja personību • Sūtītājs vēlāk nevarētu noliegt ziņojuma saturu • Saņēmējs nevarētu vēlāk samainīt saņemtu ziņojumu • Parasti digitāla paraksta algoritmi balstās uz asimetriskās (publiskās atslēgas) kriptogrāfijas
Digitāla paraksta princips Šifrēšanas funkcija E un atšifrēšanas funkcija D ar īpašībām: • D(E(m))=m un E(D(m))=m
Digitāla paraksta shēma • Tipiski sastāv no trīs algoritmiem: • Atslēgu ģenerācijas algoritms, kas izveido publisku atslēgu PK un privātu atslēgu SK paraksta īpašniekam • Parakstīšanas algoritms: • S(m, SK)=k • Paraksta verifikācijas algoritms: • V(m, PK, k)={true/false} • Digital Signature Algorithm (DSA): ASV digitāla paraksta standarts (1991)
Message Digest • Parasti nav nepieciešams šifrēt visu ziņojumu, bet vajag tikai izveidot digitālu parakstu autora autentifikācijas mērķim • Ideja – izmantot neatgriezenisku heš-funkciju • Ieeja: patvaļīga garuma bitu virkne • Izeja: fiksēta garuma (128, 160) bitu virkne
Prasības ziņojuma profila funkcijai Heš-funkciju MD sauc par ziņojuma profilu un tai ir jāizpildās sekojošiem nosacījumiem: • Dotam tekstam P ir vienkārši aprēķināt MD(P) • Zinot MD(P) praktiski nav iespējams aprēķināt P • Dotam P praktiski nav iespējams atrast tādu P’, lai MD(P)=MD (P’) • Pat viena bita izmaiņa ieejas virkne noved pie ļoti atšķirīga rezultāta
Digitālais paraksts ar profila izmantošanu m - ziņojums DA – Alises privātā atslēga MD – ziņojuma profila (message digest) funkcija
Digitālais paraksts http://gdp.globus.org/gt4-tutorial/singlehtml/progtutorial_0.2.1.html#id2563251
Message Digest algoritmi Divi populāri heš-funkciju algoritmi: • MD5 (Message-Digest algorithm 5) • Digest size: 128 bits • Designer: Ron Rivest, 1991 • Internet standard • Widely used to check integrity of files • SHA-1 (Secure Hash Algorithm) • Digest size: 160 bits • Applications: Digital Signature Algorithm, TLS/SSL, PGP, SSH, S/MIME, and IPsec
Российские стандартыалгоритмов • ГОСТ 28147-89 - советский и российский стандарт симметричного шифрования, введённый в 1990 году (КГБ) • ГОСТ Р34.11-94 - процедура вычисления хэш-функции, введён в 1995 году • ГОСТ Р34.10-2001 - стандарт, описывающий алгоритмы формирования и проверки электронной цифровой подписи
Platform Security • The Java™ platform was designed with a strong emphasis on security • Core language features: • Strong data typing • Automatic memory management • Garbage collection • Range-checking on arrays • Access modifiers (public, protected, private) • Byte-code verification • Secure class loading
Java Security Technology Java security technology includes a large set of APIs, tools, and implementations of commonly used security algorithms, mechanisms, and protocols • cryptography • public key infrastructure • secure communication • authentication • access control
Basic Security Architecture Security APIs were designed around the following principles • Implementation independence • Applications do not need to implement security themselves, they can request security services from the Java platform via providers • Implementation interoperability • Providers are interoperable across applications • Algorithm extensibility • The Java platform includes a number of built-in providers, supports the installation of custom providers
Security Providers • Implementation independence is achieved using a "provider"-based architecture • Provider - a package or set of packages that implement one or more security services import java.security.*; Provider[] providers = Security.getProviders(); for (Provider p: providers){ System.out.println(p.toString()); } SUN version 1.6 SunRsaSign version 1.5 SunJSSE version 1.6 SunJCE version 1.6 SunJGSS version 1.0 SunSASL version 1.5 XMLDSig version 1.0 SunPCSC version 1.6 SunMSCAPI version 1.6 Java 6.0
Cryptographic engines • Algorithm independence is achieved by defining types of cryptographic "engines" (services) • An engine class provides the interface to a specific type of cryptographic service, independent of a particular cryptographic algorithm or provider • Examples: • SecureRandom • MessageDigest • Signature • Cipher
Listing provider services Provider[] providers = Security.getProviders(); for (Provider p: providers){ System.out.println(p.toString()); Set<Service> services = p.getServices(); for (Service s: services){ System.out.println(" " + s.getType() + " --> " + s.getAlgorithm()); } }
Requesting service To use the JCA, an application • requests a particular type of object (such as a MessageDigest) • and a particular algorithm or service (such as the "MD5" algorithm) • and gets an implementation from one of the installed providers try { MessageDigest md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { // no such algorithm provided }
Provider selection md = MessageDigest.getInstance("MD5"); md = MessageDigest.getInstance("MD5", "ProviderC");
The SecureRandom Class • Provides the functionality of a Random Number Generator • Produces cryptographically strong random numbers SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); System.out.println("Int: " + random.nextInt()); System.out.println("Float: " + random.nextFloat()); System.out.println("Long: " + random.nextLong()); System.out.println("Boolean: " + random.nextBoolean()); Int: 256421598 Float: 0.63456607 Long: 7589616350181670704 Boolean: true
The MessageDigest Class • Designed to provide the functionality of cryptographically secure message digests such as SHA-1 or MD5 • The MD5 algorithm produces a 16 byte digest, and SHA-1's is 20 bytes • Message digests are used to produce unique and reliable identifiers of data, sometimes called "checksums" or the "digital fingerprints" of the data
Computing aMessageDigestobject MessageDigest sha = MessageDigest.getInstance("SHA-1"); byte[] i1 = "Hello World".getBytes(); sha.update(i1); byte[] hash = sha.digest(); System.out.println((new BASE64Encoder()).encode(hash)); byte[] i2 = "Hello World!".getBytes(); sha.update(i2); hash = sha.digest(); System.out.println((new BASE64Encoder()).encode(hash)); sha.update(i1); hash = sha.digest(); System.out.println((new BASE64Encoder()).encode(hash)); Ck1VqNd45QIvq3AZd8XYQLvEhtA= Lve95gjOVATpfV8EL5X4nxwjKHE= Ck1VqNd45QIvq3AZd8XYQLvEhtA=
The Signature Class Provide the functionality of a cryptographic digital signature algorithm such as DSA
Signature Object States • Signature objects are modal objects • Signature object is always in a given state, where it may only do one type of operation • The three states a Signature object may have are: UNINITIALIZED initSign() initVerify() SIGN VERIFY
Generating a Pair of Keys • First step is to generate public/private key pair • All key pair generators share the concepts of a keysize and a source of randomness KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DSA"); SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); keyGen.initialize(1024, random); KeyPair pair = keyGen.generateKeyPair(); PrivateKey privateKey = pair.getPrivate(); PublicKey publicKey = pair.getPublic();
Generating/verifying a signature byte[] data = "Data to be signed".getBytes(); // generating a signature Signature dsaForSign = Signature.getInstance("SHA1withDSA"); dsaForSign.initSign(privateKey); dsaForSign.update(data); byte[] signature = dsaForSign.sign(); // verifying a signature Signature dsaForVerify = Signature.getInstance("SHA1withDSA"); dsaForVerify.initVerify(publicKey); dsaForVerify.update(data); boolean verifies = dsaForVerify.verify(signature); System.out.println("Signature verifies: " + verifies);
The Cipher Class Provides the functionality of a cryptographic cipher used for encryption and decryption for (String a: Security.getAlgorithms("Cipher")){ System.out.println(a); }
Using Encryption (AES) // Generate AES key KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecretKey aesKey = keygen.generateKey(); // Initialize cipher object Cipher aesCipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); aesCipher.init(Cipher.ENCRYPT_MODE, aesKey); byte[] cleartext = "Data to be encoded".getBytes(); // Encrypt the cleartext byte[] ciphertext = aesCipher.doFinal(cleartext); // Initialize the same cipher for decryption aesCipher.init(Cipher.DECRYPT_MODE, aesKey); // Decrypt the ciphertext byte[] cleartext1 = aesCipher.doFinal(ciphertext);
Encryption Exceptions try { // algorithm from previous slide . . . System.out.println("Cipher successful!"); } catch (NoSuchAlgorithmException e1) {. . .} catch (NoSuchPaddingException e2) {. . .} catch (BadPaddingException e3) {. . .} catch (InvalidKeyException e4) {. . .} catch (IllegalBlockSizeException e5) {. . .}
HTTPS • Hypertext Transfer Protocol Secure • HTTP protokola paplašinājums, kas atbalsta šifrēšanu • Dati, kas tiek pārraidīti pa HTTP tiek “iepakoti” kriptogrāfiskā protokolā SSL vai TLS, līdz ar ko tiek nodrošināta aizsardzība • Tiek izmantots URL prefikss https:// • Porta numurs pēc noklusējuma: 443
HTTPS • Sistēmu izstrādāja Netscape Communications Corporation, lai nodrošināt autentifikāciju unšifrētu savienojumu • HTTPS tiek plaši izmantots Web aplikāciju pasaulē, kur ir svarīga savienojuma drošība, piemērām, maksājumu sistēmās • HTTPS aizsarga datus pārraides gaitā no slepus noklausīšanas un "man-in-the-middle" tipa uzbrukumiem
HTTPS • Stingri ņemot, HTTPS nav atsevišķs protokols: • Lai sagatavot Web serveri HTTPS savienojumu pieņemšanai administratoram ir jāizveido publiskas atslēgas sertifikātu • HTTPS izmanto atslēgas garumu tikai 40, 56 vai 128 biti, kas ir nepietiekami • Līdz ar to nevajadzētu uzskatīt, ka HTTPS nodrošina augstu drošības līmeni HTTPS = HTTP + SSL/TLS