PYTHON - KRYPTAUSOPAS. Lappeenrannan teknillinen yliopisto 2007 Jussi Kasurinen

Koko: px
Aloita esitys sivulta:

Download "PYTHON - KRYPTAUSOPAS. Lappeenrannan teknillinen yliopisto 2007 Jussi Kasurinen"

Transkriptio

1 PYTHON - KRYPTAUSOPAS Lappeenrannan teknillinen yliopisto 2007 Jussi Kasurinen

2 Johdanto Tässä oppaassa esitellään Python-ohjelmointikielen salaus- ja varmennustekniikoiden kirjastomoduuli Python Cryptography Toolkit. Oppaassa oletetaan, että ymmärrät Pythonohjelmointikielen perusasiat, jotka on opetettu mm. Python-ohjelmointioppaassa [1], mutta et välttämättä tarvitse aiempaa tietoa salausalgoritmeista. Huomaa myös, että oppaan luvut 2 (Huomioita PCT-moduulista) - 7 (Muita työkaluja) on vapaasti käännetty alkuperäisen kirjastomoduulin mukana toimitettavasta manuaalista [2], mutta siihen on lisätty mukaan myös uusia esimerkkejä sekä tarpeen mukaan täydentävää tekstiä. Kappaleet, joiden varsinaista asiasisältöä on muokattu, tai jotka ovat tätä opasta varten kirjoitettua täydentävää materiaalia, on merkattu tekstin vasemmassa reunamarginaalissa olevalla merkinnällä. Asennus Python Cryptography Toolkit (PCT) asennetaan tietokoneelle erillisenä pakettina Python Imaging Libraryn tai Py2Exe-pakkaajan tavoin. Tämä tarkoittaa siis sitä, että aloittaaksesi kryptauskirjastolla työskenetelyn, tarvitset verkkoyhteyden tietokoneeseesi. Tämän jälkeen toimi seuraavalla tavalla: Hae Python Cryptography Toolkit uusin versio (kirjoitushetkellä 2.0.1) osoitteesta Valitse oikea paketti käyttämäsi tulkin version mukaisesti. Asenna PCT normaalin lisäkirjaston asennuskaavan mukaisesti. Asennus on suoraviivainen, mutta mikäli tarvitset ohjeet asennusta varten, löytyy sellaiset esimerkiksi Pythongrafiikkaohjelmointioppaasta [3]. Oppaan ohjeissa asennetaan Python Imaging Library, mutta asennusvaiheet ja tapahtumat ovat muutoin täysin samat. Asennuksen jälkeen käynnistä Python-tulkki ja kirjoita interaktiiviseen ikkunaan komento import Crypto huomaa iso C-kirjain. Mikäli tulkki ei antanut virheilmoitusta, olet asentanut PCT:n onnistuneesti ja voit jatkaa eteenpäin oppaan kanssa työskentelyä. 1

3 Huomioita PCT-moduulista Alkuperäinen lähde Python Crypthography Toolkit Manual, Python Cryptography Toolkit on kehitetty toimimaan luottavana sekä vakaana alustana, jonka päälle on mahdollista kirjoittaa ohjelmia, jotka vaativat tiedon salaukseen tai varmentamiseen tarvittavia funktioita. Keskeinen tavoite moduulin toteutuksessa onkin ollut toteuttaa yksinkertainen sekä yhdenmukainen rajapinta toistensa kaltaisille funktioille. Esimerkiksi kaikki salausobjektit (block cipher objects) sisältävät samannimiset metodit sekä palautusarvot sekä tukevat samoja palautemoodeja. Tarkastuslukujen (hash) laskemiseen käytettävillä funktioilla on tekniikoista johtuen erilaiset käyttöliittymät, mutta niiden yleinen toiminta on pyritty yhdenmukaistamaan. Lisäksi osalle funktioista on määritelty toiminta PEP (Python Enhancement Proposal)-dokumentteina [4,5]. Tällä toimenpiteellä pyritään helpottamaan salausalgoritmien korvaamista uudemmilla ja varmemmilla algoritmeilla. Jos olet aiemmin luonut ohjelman, joka käyttää esimerkiksi DESalgoritmia salauksen toteuttamiseen, voit helposti vaihtaa sen esimerkiksi AES-algoritmiin muuttamalla sisällytyskäskyn muodosta from Crypto.Cipher import DES muotoon from Crypto.Cipher import AES Tämän lisäksi riittää kun korvaat vielä käskyt DES.new() käskyllä AES.new(). Myös omien moduulien kirjoittaminen on helppoa: voit esimerkiksi toteuttaa moduulin joka käyttää tätä rajapintaa ja täten luoda salauksen, joka hyödyntää usean salausalgoritmin yhdistelmiä. Osa moduuleista on toteutettu C-kielellä laskentanopeuden parantamiseksi; muut taas Pythonilla muokattavuuden helpottamiseksi. Yleisesti tämä tarkoittaa sitä, että matalan tason laskentafunktiot, kuten salakirjoittajat (ciphers) sekä varmistussummalaskurit (hash functions) on toteutettu C- kielellä, kun taas niiden käyttämiseen tarkoitetut vähemmän laskentatehoa vaativat - funktiot on toteutettu Pythonilla. Kannattaa myös huomioida, että kun puhumme nopeudesta, tarkoittaa se 500 MHz Pentium 2 koneella laskettuja suoritusaikoja. Tarkka nopeus tietenkin riippuu monesta muustakin tekijästä, mutta oppaan aikavertailut ovat suuntaa antavia. Moduulien ohjelmakoodi on vapaasti muokattavissa ja levitettävissä. Kuitenkaan se ei vielä tarkoita sitä, että kaikki koodi olisi vapaasti käytettävissä: osa tähänkin moduuliin sisällytetyistä salausmekanismeista on patentoitu kaupallista käyttöä varten, joten mikäli toteutat kaupalliseen 2

4 levitykseen tarkoitettua projektia, varmista että käyttämäsi salausmekanismi ei kuulu näihin. Muussa tapauksessa joudut itse sopimaan patentinhaltijan kanssa asiasta. Lisäksi joissain maissa (esim. Yhdysvallat) salausalgoritmien käyttöä ja levitystä valvotaan kansallisilla lailla, joten varmista lisäksi ettet riko paikallisia lakeja. Suomessa kyseisiä rajoitteita tai lakeja ei tiettävästi ole, joten voit vapaasti käyttää ja levittää tekemiäsi ohjelmia kunhan et riko kaupallisen käytön lisenssiehtoja. Myöskään salausalgoritmien salauksen varmuus ei ole itsestäänselvyys. Osa salausalgoritmeista on onnistuttu murtamaan joko yksittäistapauksissa tai täydellisesti, tehden salauksesta triviaalin. Tästä puhutaan oppaassa myöhemmin lisää, mutta tärkeintä kaikilla näillä varoituksilla on tarkoitus: mikäli työskentelet ohjelman kanssa jonka haluat olevan oikeasti turvallinen, niin käytä ennemmin hieman aikaa taustatutkimukseen ennen kuin aloitat työstämään projektiasi huonoilla tai viallisilla osilla. 3

5 Crypto.Hash: Tarkastuslukufunktioita Alkuperäinen lähde Python Crypthography Toolkit Manual, Tarkastuslukufunktiot (hash-functions) ottavat syötteenään satunnaisen mittaisia merkkijonoja lähtöarvoina ja tuottavat tietyn mittaisia tulosjonoja eli tarkastussummia, joiden arvo riippuu annetusta lähtöarvosta. Tarkastulukufunktiot toimivat siten, että annettua lähtöarvoa ei pitäisi pystyä päättelemään palautetusta tulosjonosta, mutta lähtöarvon oikeellisuus pystytään varmentamaan palautetun tarkastusluvun avulla. Yksinkertaisimmillaan tämä tarkoittaa vaikkapa funktiota, joka laskee yhteen kaikki merkkijonon bittiarvot, ja ottaa tuloksesta jakojäännöksen arvolla 256: >>> sana = "Sihijuoma" >>> tulos = 0 >>> for i in range(0,len(sana)): tulos = tulos + ord(sana[i]) >>> tarkastusluku = tulos % 256 >>> tarkastusluku 169 >>> Esimerkissä syötteenä antamallemme merkkijonolle Sihijuoma saatiin tarkastusluvuksi arvo 169. Vastaavasti jos olisimme toteuttaneet laskennan merkkijonolle sihijuoma (pieni s-kirjain), olisi tulos ollut 201, ja merkkijonolle Ketsuppijäätelö 194. Kuten huomaamme, yhdessäkään tapauksessa emme pysty päättelemään, mikä alkuperäinen merkkijono oli, sekä samalla todistimme, että yhden merkin muuttaminen vaihtaa tarkastusluvun arvoa merkittävästi. Ollakseen varma sekä luotettava, on tarkastuslukufunktiot toimittava siten, että kahden saman tarkastusluvun tuottavan lähtöarvon löytäminen, tai tarkastusluvun arvon avulla tekstin generoiminen on vaikeaa. Vaikka yksinkertainen esimerkkimme ei täytäkään kumpaakaan ehtoa, on se silti perusajatukseltaan oikea. Jos taas haluamme käyttää turvallisia tarkastuslukufunktioita, niin esimerkiksi algoritmeja MD2, MD5, SHA, ja HAVAL on yleisesti pidetty turvallisina laskureina. Tarkastuslukufunktioita käytetään tavallisesti tiedostonsiirroissa varmennuslukuina sekä julkisten avainten yhteydessä digitaalisina allekirjoituksina. PCT tukee tällä hetkellä seuraavia tarkastuslukualgoritmeja: 4

6 Hash-funktio Luvun pituus MD2 128 bittiä MD4 128 bittiä MD5 128 bittiä RIPEMD 160 bittiä SHA 160 bittiä Kaikilla tarkastuslukufunktioilla on sama käyttöliittymä. Kun haluttu funktio on sisällytetty käskyllä from Crypto.Hash import nimi, voidaan funktiolla new() luoda uusi tarkastuslukuobjekti. Tälle objektille tämän jälkeen syötetään lähtöarvo update() metodilla. Tarkastusluku voidaan ottaa ulos joko tavallisena merkkijonona tai heksa-arvoina metodeilla digest() ja hexdigest(). Funktiolle new() voidaan myös suoraan kutsussa antaa parametrina lähtöarvo, joka samalla muutetaan tarkastusluvuksi. Ohessa esimerkki käyttäen MD5-algoritmia: >>> from Crypto.Hash import MD5 >>> tarkastusluku = MD5.new() >>> tarkastusluku.update('kurjenmutka') >>> tarkastusluku.digest() '\x06kk\x8d~\xe1>\xc0\xb1k\x96;\xf7o_\xb6' >>> tarkastusluku.hexdigest() '064b6b8d7ee13ec0b14b963bf76f5fb6' >>> Käyttöliittymien samankaltaisuudesta johtuen voimme toteuttaa saman uudelleen vaikkapa SHAalgoritmilla: >>> from Crypto.Hash import SHA >>> tarkastusluku = SHA.new() >>> tarkastusluku.update('hanhivaara') >>> tarkastusluku.digest() '\x9d\x06x\xb5xb,\xb6\x133\xfb\xbd\xd2-\xe5\xc4\xf9\xa7\x91\xad' >>> tarkastusluku.hexdigest() '9d0678b558622cb61333fbbdd22de5c4f9a791ad' >>> Huomioi, että SHA tuottaa pidemmän tarkastusluvun kuin esimerkiksi MD5. Tässä vielä kootusti tarkastuslukufunktioiden metodit ja muuttujat: digest_size Integer-arvo; Tämä arvo sisältää tiedon siitä, kuinka pitkän tarkastusluvun funktio palauttaa. Arvon muuttaminen ei vaikuta funktion toimintaan, vaan on lähinnä tarkoitettu nopeuttamaan tarkastusluvun koon hakemista. copy() Palauttaa kopion alkuperäisestä tarkastuslukuobjektista. Tämän objektin muuttaminen ei vaikuta alkuperäisen objektin arvoihin. digest() Palauttaa objektille annetusta lähtöarvosta tarkastusluvun merkkijonona. Objekti itsessään ei muutu funktion seurauksena, joten voit käyttää objektia uudelleen vaihtamalla lähtöarvoja update() metodilla ja kutsumalla digest() metodia uudelleen.. 5

7 hexdigest() Sama kuin digest(), mutta palauttaa tarkastusluvun heksa-arvoina. Tämän vuoksi merkkijono on aina kaksi kertaa pidempi kuindigest() metodin palauttama. update(arg) Antaa tarkastuslukuobjektille lähtöarvoksi parametrin arg. new(arg) Luo uuden tarkastuslukuobjektin. Ottaa vastaan myös parametrin arg, joka annetaan suoraan lähtöarvoksi. Huomioita turvallisuudesta Tarkastusluku-algoritmit pystytään rikkomaan kehittämällä algoritmi, joka generoi annettua tarkastuslukua vastaavia lähtöarvoja, tai tuottaa viestejä, joilla on sama tarkastusluku. Voimme osoittaa tämän ongelman käytännön esimerkin avulla: Hannu ja Aku käyttävät digitaalista allekirjoitusta vahvistaakseen sopimuksen. Aku laskee sopimuksen tekstistä tarkastusluvun ja allekirjoittaa sen omalla salatulla avaimellaan. Tämän jälkeen Hannun tarvitsisi ainoastaan korvata Akun kirjoittaman sopimuksen teksti sellaisella, joka antaa saman tarkastusluvun, eikä Aku pystyisi mitenkään todistamaan, että sopimuksen tekstiä on muutettu. Tällaisen tekstin löytäminen vaatisi Hannulta 2 b-1 testiä; b on tarkastusluvun pituus bitteinä. Jos Hannu pystyy tuottamaan kaksi tekstiä, jotka antavat saman tarkastusluvun mutta ei pysty vaikuttamaan suoraan tarkastusluvun arvoon, voisi hän valita kaksi tekstiä joiden merkitys on hyvin erilainen. Ensin hän allekirjoituttaisi Akulla normaalin sopimuksen, vaikkapa Ajan Hannun nurmikon mikäli en ui jouluaattona järven yli, ja jälkikäteen vaihtaa tekstiksi toisen tuloksen Annan taloni Hannulle ellen ui jouluaattona järven yli. Tämä olisi kaiken lisäksi Hannulle helpompaa: keskimäärin tarvitsisimme ainoastaan 2 b/2 yritystä. Jälleen kerran Aku ei pystyisi todistamaan, että allekirjoitettua sopimusta on muutettu. Aku voisi tietenkin turvata tilanteensa sotkemalla algoritmin syöttämällä tekstiin satunnaisesti generoidun lisärivin, jonka säilyttämällä hän pystyisi todistamaan sopimuksensa aitouden. Tämä ei vielä varsinaisesti ole huolenaihe PCT:n tarkastuslukualgoritmien kanssa. PCT:n käytössä olevista viidestä tarkastuslukualgoritmista yhtäkään ei ole vielä onnistuttu trivialisoimaan. MD2:ta vastaan ei ole olemassa tunnettuja hyökkäyksiä, mutta sen suoritusnopeus 1250 K/sek. tekee siitä varsin hitaan algoritmin. MD4 on nopeampi 44,500 K/sek mutta se on onnistuttu osittain murtamaan. MD4 sisältää kolme iteratiivista sekoituskierrosta: näistä kaksi on jo pystytty murtamaan mutta täyttä algoritmia ei vielä toistaiseksi saatu täysin rikottua. MD5 on MD4- algoritmista paranneltu versio ja se sisältää neljä iteraatiokierrosta. Tästäkin algoritmista yksi kierros on saatu murrettua. Siitäkin huolimatta MD5:ttä pidetään edelleen turvallisena, mutta silti useat tahot ovat siirtymässä kohti SHA-algoritmia, jolle ei vielä toistaiseksi ole olemassa tunnettuja hyökkäyksiä lukuun ottamatta SHA:n ensimmäisiä versioita, mutta nämä puutteet on myöhemmin korjattu. Lisäksi koska MD5-algoritmin suoritusnopeudeksi on mitattu 35,500 K/sek ja SHA:lle 21,000 K /sek, ei varsinaisesti ole mitään syytä käyttää heikompia algoritmeja.. 6

8 Crypto.Cipher: Salausfunktioita Alkuperäinen lähde Python Crypthography Toolkit Manual, Salausalgoritmit (encryption algorithms) toimivat siten, että ne muuntavat niille annetun syötetekstin (selkoteksti, plaintext) jonkin kaavan ja avaimen (variable key) avulla salatuksi tekstiksi (salateksti, ciphertext). Salaus- ja purkuoperaatio on tarkoitus olla helppo ja nopea suorittaa kumpaan tahansa suuntaan, mutta ainoastaan mikäli käyttäjällä on hallussaan salauksessa käytetty avain. Tämä tarkoittaa tietenkin sitä, että salausalgoritmi on luotettava ja varma silloin, kun mahdollisia avaimia on suuri määrä ja käytettävää avainta ei pystytä päättelemään tuotetusta salatekstistä. Yksinkertainen esimerkki kryptauksesta voisi olla algoritmi, joka vaihtaa kirjaimia aakkosissa eteen- tai taaksepäin tietyn verran: >>> teksti = "Karhuvuori" >>> avain = 3 >>> salattu = "" >>> for i in range(0,len(teksti)): salattu = salattu + chr(ord(teksti[i])+avain) >>> salattu 'Ndukxyxrul' >>> Tässä tapauksessa selkoteksti on siis Karhuvuori, salausavain 3 ja tuloksena saatava salateksti Ndukxyxrul. Tietenkään tällainen salaus ei ole kovin tehokas, koska potentiaalisia avaimia on ainoastaan 54 kappaletta. Lisäksi kirjainten suhteellinen määrä pysyy vakiona: jos tiedämme millä kielellä teksti on salattu, voimme muutaman kokeilun avulla purkaa tekstin kunhan ensin paikallistamme symbolit, jotka vastaavat yleisimmin käytettyjä kirjaimia, kuten a,e,l,n,k ja m. Luonnollisesti paremmat salausalgoritmit ottavat tämänkin huomioon, esimerkiksi muuttelemalla avainta jonkin kaavan mukaisesti: >>> teksti = "Peikonhammas" >>> avain = 3 >>> salattu = "" >>> for i in range(0,len(teksti)): salattu = salattu + chr(ord(teksti[i])+avain) avain = avain + 1 >>> salattu 'Sinqvvqkxyn\x81' 7

9 Nyt luotua salatekstiä on jo paljon vaikeampi tulkita. Ollakseen tehokas, täytyy salausalgoritmista yleensäkin olla mahdollisimman vaikeaa päätellä mitään tietoa selkotekstistä ilman avainta. Tämä tarkoittaa myös sitä, että salaukselle ei tulisi olla olemassa mitään tehokkaita hyökkäysmenetelmiä, ja että ainoa tapa avata salateksti ilman avainta on kokeilla kaikkia mahdollisia kombinaatioita. Koska avainkombinaatioita tavallisesti on vähintään 2 56 tai kappaletta, ei tämä aiheuta ongelmia. Kannattaa kuitenkin huomata, että 2 56 avaimen algoritmit voidaan nykyään periaatteessa purkaa järkevässä ajassa (muutama tunti - muutama päivä) sitä tarkoitusta varten suunnitellulla rinnakkaislaskentatietokoneella. Kehittyneempiä salausalgoritmeja ovat lohkonsalausalgoritmit (block ciphers), jotka ottavat syötteinä vastaan määrätyn kokoisia syötteitä. Nämä syötteet ovat normaalisti kokoluokkaa 8 tai 16 tavua. Yksinkertaisimmillaan lohkonsalaajat toimivat siten, että ne ottavat tekstistä peräkkäisiä lohkoja, ja salaavat ne normaalin salausalgoritmin tavoin. Tätä toimintatapaa sanotaan Electronic Code Book (ECB)-tilaksi. ECB on kuitenkin vaarallinen, koska tällöin peräkkäiset samansisältöiset rivit kuten kommenttimerkeillä piirretyt laatikot lähdekoodissa tuottavat samanlaisia lohkoja salatekstiin. Tällöin tekstin purkamista yrittävillä henkilöillä on jo jonkinlainen lähtökohta tekstin purkamiseen. Tätä torjutaan tavallisesti takaisinsyöttötiloilla, joissa edellisen lohkon tulos vaikuttaa seuraavaan, eikä kaksi peräkkäistä lohkoa tällöin saa koskaan samaa arvoa. Muita toimintatiloja ovat mm. Cipher Block Chaining (CBC) sekä Cipher FeedBack (CFB). CBC pakkaa tietoa edelleen lohkoissa, ollen ainoastaan hieman ECB-menetelmiä hitaampi. CFB puolestaan pakkaa tietoa merkki kerrallaan, ollen huomattavasti muita hitaampi. CBC tilat tarvitsevat alustuksessa lähtöarvon, jota käytetään ensimmäisen lohkon salaamisessa. Python Cryptography Toolkit tukee tällä hetkellä seuraavia lohkonsalausalgorimeja. Ne kaikki löytyvät kirjastomoduulin Crypto.Cipher sisältä: Salaus ARC2 Blowfish CAST DES DES3 (Triple DES) IDEA RC5 AES Avaimen koko/lohkon koko Vaihtelee/8 tavua Vaihtelee /8 tavua Vaihtelee /8 tavua 8 tavua/8 tavua 16 tavua/8 tavua 16 tavua/8 tavua Vaihtelee /8 tavua 16, 24, tai 32 tavua/16 tavua On myös olemassa tietovirransalaukseen käytettäviä salausalgoritmeja (stream ciphers), jotka periaatteessa ovat merkki kerrallaan salaavia lohkonsalausalgoritmeja. Näillä algoritmeilla lohkon koko on aina 1 tavu, eikä niillä ole toimintatiloina kuin ainaostaan ECB. PCT tukee seuraavia virransalausalgoritmeja: Salaus Avaimen koko XOR Vaihtelee ARC4 Vaihtelee 8

10 ARC4 on lyhenne sanasta Alleged RC4. Tämä johtuu siitä, että oikea RC4-algoritmi on RSA Data Security Inc. omaisuutta, mutta PCT:hen sisällytetty versio on siitä verkkoon vuotanut algoritmiversio. Ei ole täysin varmaa, onko ARC4 oikeasti RC4, mutta salaus ei vaikuttaisi olevan helposti purettavissa. Kannattaa kuitenkin pitää mielessä, että kyseinen implementaatio ei ole virallinen, eikä tällöin sen mahdollisia takaportteja tai muita ongelmia välttämättä tiedetä. Salausalgoritmien toimintaa voimme testata myös esimerkin avulla: >>> from Crypto.Cipher import DES >>> avain = DES.new('ABCDEFGH') #Huomaa avaimen 8 merkkiä >>> selko="suo mulle hauta pohjassa meren,\ kun vanhuuden peikko mun hyytävi veren." >>> len(selko) 70 >>> avain.encrypt(selko) Traceback (most recent call last): File "<pyshell#42>", line 1, in <module> avain.encrypt(selko) ValueError: Input strings must be a multiple of 8 in length >>> salateksti = avain.encrypt(selko+"xx") >>> salateksti '4t\x97b\xdf\xe7\xbbRd`\r`,\xca`x\x16\xdc\xb17\xf0\xa4ow&\xe7,$\xf81\x02\xa0R\x8 7\x07<\x9c9\xacu.8\xf3z1T=8]8\x96\x02L\x07\xb69\xde\xb4\x90\x91!\xce)\r\x85j\x16!A\\\x12p' >>> avain.decrypt(salateksti) 'Suo mulle hauta pohjassa meren,kun vanhuuden peikko mun hyyt\xe4vi veren.xx' >>> Kuten koodista ilmenee, on tekstiä salattaessa muistettava, että selkotekstin on oltava jaollinen käytetyn algoritmin lohkon pituudella. Tässä tapauksessa käytimme DES-algoritmia, jonka lohko on 8 tavua pitkä. Ensimmäinen yrityksemme salata 70 merkkiä pitkä teksti kaatui siihen, että viimeiseen lohkoon olisi jääny ainoastaan 6 tavua, joten jouduimme pidentämään sitä lisäämällä loppuun kaksi X -kirjainta. Kaikki salausfunktiot toimivat samanlaisella käyttöliittymällä. Kun olemme sisällytyksen yhteydessä päättäneet, mitä algoritmia käytämme, pystymme käyttämään seuraavia metodeja sekä attribuutteja salauksen säätelemiseen: new(key, [ mode, IV]) Luo uuden salausobjektin käyttäen alustusarvoina syötettyä avainta key sekä toimintatilaa mode. Jos annettu tila on CBC tai CFB, täytyy lisäksi antaa aloitusarvo IV. Lisäksi joillain salausalgoritmeilla on lisäksi omia lisäasetuksia, niistä voit lukea seuraavalta sivula. block_size Integer-arvo, joka sisältää tiedon siitä minkä kokoisia lohkoja salausalgoritmi käyttää. key_size Integer-arvo, joka kertoo minkä pituisia avaimia algoritmi käyttää. Jos arvo on 0, on avaimen koko vaihteleva. IV Sisältää lähtöarvon jota käytetään lohkojen salauksessa. Alustuksen jälkeen sisältää aloitusarvon, salauksen jälkeen uusimman generoidun. Tätä arvoa et voi muuttaa käsin. 9

11 decrypt(string) Purkaa annetun merkkijonon string salauksen objektiin tallennetulla avaimella. Annettavan merkkijonon tulee aina olla salausalgoritmin käyttämän lohkon koon moninkerta. Palauttaa selkotekstin merkkijonona. encrypt(string) Salaa merkkijonon string käyttäen salausobjektille annettua avainta. Syötettävän merkkijonon tulee olla käytetyn salausalgoritmin lohkon koon moninkerta. Virtasalausalgoritmit ottavat vastaan minkä pituisen tekstin tahansa. Palauttaa salatekstin merkkijonona. Algoritmikohtaisia attribuutteja RC5-algoritmin yhteydessä voimme käyttää normaalien alustusparametrien lisäksi seuraavia lisäparametreja: version: Mitä salausalgoritmin implementaatiota käytetään. Ainoa PCT:hen toteutettu versio on tällä hetkellä 1.0, eli ainoa sopiva arvo on0x10. wordsize: Minkä pituisia sanoja käytetään; 16 ja 32 ovat ainoat sopivat arvot.. Yleisesti pidempi on parempi, joten on suositeltavaa käyttää 32 merkin sanapituutta. rounds: Kuinka monta kierrosta salausalgoritmia ajetaan, yleisesti ottaen enempi on parempi. Arvo voi olla mitä tahansa väliltä 0 ja 255, joten arvon valinta perustuu lähinnä nopeuden ja turvallisuuden väliseen valintaan. Huomioita turvallisuudesta Salausalgoritmit voidaan murtaa monella eri menetelmällä. Jos sinulla on salatekstiä ja tiedät (tai pystyt arvaamaan) mitä sanoja tai lauseita teksti sisältää, voit sen avulla yrittää known-plaintexthyökkäystä. Toisaalta, jos taas pystyt valitsemaan tekstin, joka salataan sinulle tuntemattomalla avaimella, pystyt analysoimaan avaimen arvon ja paljastamaan esimerkiksi jonkun henkilökohtaisen avaimen. Tätä kutsutaan chosen-plaintext-hyökkäykseksi. DES (5100 K/sek) käyttää 56-bittistä avainta; tämän kokoinen avain on käymässä liian pieneksi ollakseen varmasti turvallinen. Arviolta miljoona dollarilla riittää helposti supertietokoneeseen, joka pystyy muutamassa tunnissa murtamaan 56-bittisiä avaimia. Tähän operaatioon tarvitaan kuitenkin keskimäärin 2 43 operaatiota, joten tavallisilta tietovarkailta olet edelleen turvassa. Mikäli kuitenkin haluat suojautua kaikkia tilanteita varten, voit luonnollisesti käyttää DES3-salausta (1830 K/sek), joka käyttää 112- tai 168-bittisiä avaimia. Myöskään IDEA-algoritmia (3050 K/sek) vastaan ei ole olemassa julkisesti tunnettuja hyökkäyksiä, vaikka algoritmi onkin ollut olemassa jo kauan. Lisäksi ARC2 (2160 K/sek), ARC4 (8830 K/sek), Blowfish (9250 K/sek), CAST (2960 K/sek) ja RC5 (2060 K/sek) ovat edelleen turvallisia, mutta ne ovat edelleen melko uusia algoritmeja, joten niiden suojausongelmia ei välttämättä vielä ole edes tutkittu tarkkaan. AES-algoritmi valittiin US National Institute of Standards and Technology:n testeissä kuuden kilpailijan joukosta tehokkaimmaksi ja turvallisimmaksi, joten sitä voidaan pitää ainakin melko hyvänä vaihtoehtona. Lisäksi sen salausnopeus (7060 K/sek) on suhteellisen nopea. 10

12 Crypto.Protocol: Salausprotokollia Alkuperäinen lähde Python Crypthography Toolkit Manual, Crypto.Protocol.AllOrNothing Tämä moduuli sisältää toteutuksen kaikki-tai-ei-mitään-tyyppisille pakettimuunnoksille. Nämä pakettimuunnokset toimivat siten, että lähdeaineisto pakataan paketteihin, jotka kaikki pitää saada vastaanotettua ennen kuin salattu aineisto voidaan muuntaa takaisin alkuperäiseen muotoon. Tällöin pakettien rikkoutuminen, muunteleminen tai häviäminen estää viestin vastaanottamisen. Kaikki-tai-ei-mitään-paketit eivät varsinaisesti ole salattuja, vaikka niiden yhteydessä käytetäänkin lohkonsalausalgoritmeja. Salausavain näet luodaan satunnaisesti ja se on helposti pääteltävissä pakettien sisällöstä. Python Cryptography Toolkitin kaikki-tai-ei-mitään-menetelmän määrittelevä kirjasto sisältää seuraavat rakenteet: class AllOrNothing(ciphermodule, mode=none, IV=None) Luokkarakenne joka määrittelee pakettimuunnoksen. ciphermodule määrittelee käytettävän salausalgoritmin. Lisäparametrejä mode ja IV voidaan käyttää tarvittaessa salauksen tarkempaan määrittelyyn. Ciphermodule voi olla mikä tahansa edellisessä luvussa määritellyistä salausalgoritmeista. digest() Suorittaa update()-metodilla syötetylle lähdeaineistolle kaikki-tai-ei-mitään pakkauksen. Tuottaa listan merkkijonoja, jossa yksi jono vastaa yhtä pakettia. reset(text = "") Tyhjentää moduulin muistin. undigest(mblocks) Purkaa paketit selkotekstiksi. Parametri mblocks on oltava lista, jossa yksi listan alkio vastaa yhtä pakettia. Palauttaa selkokielisen merkkijonon. update(text) Syöttää parametrilla text lähdeaineiston moduulille pakkausta varten. 11

13 Crypto.Protocol.Chaffing Karsiminen ja sotkeminen (winnowing ja chaffing) on tekniikka, jolla pystymme parantamaan verkossa siirrettävän tiedon turvallisuutta joutumatta käyttämään raskaita salausalgoritmeja. Lyhyesti ajatus perustuu siihen, että otamme joukon varmennettuja paketteja jotka haluamme lähettää verkon yli, ja sotkemme lähetykseen sekaan ylimääräisiä paketteja, jotka haittaavat salakuuntelijoita. Koska salakuuntelija ei pysty avaimella tarkastamaan mitkä paketit ovat varmennettuja ja mitkä ylimääräisiä, voidaan ylimääräisillä paketeilla purkuoperaatiosta tehdä laskennallisesti mahdotonta. Jos ajattelemme asiaa käytännön esimerkin kautta, niin olettakaamme, että Roope lähettää viestiä Akulle. Roope pakkaa viestit kaikki-tai-ei-mitään menetelmällä paketteihin ja laskee paketeille varmennusluvut (message authentication code, MAC) etukäteen vaihdetulla varmennusavaimella. Lopuksi Roope vielä laittaa paketteihin järjestysnumerot ja lähettää ne Akulle. Kun Aku saa paketit, hän ensin varmentaa paketit saamallaan avaimella. Jos MAC-luku on väärin, voi Aku suoraan hylätä paketin koska se ei kuulu lähetykseen. Ne paketit, joiden varmennusluku oli oikein, Aku laittaa numerojärjestykseen, ja purkaa kaikki-tai-ei-mitään-paketoinnin saaden Roopen viestin. Jos joku pystyisi kaappaamaan paketeista kopiot verkosta, olisi hänellä seuraavanlainen ongelma: Koska kaapparilla ei olisi Roopen ja Akun käyttämää varmennusavainta, ei kaappaaja tietäisi mikä paketit ovat ylimääräisiä. Lisäksi, koska paketteja lähetettäisi useampi samalla järjestysnumerolla, joutuisi kaappaaja lisäksi kokeilemaan kaikkien pakettien kaikki kombinaatiot pystyäkseen murtamaan salauksen. Ja lopulta, koska Roope käytti kaikki-tai-ei-mitään-paketointia, on viesti hyödytön jos yksikin oikea paketti puuttuu. Erityisen nerokasta menetelmässä on se, että se ei vaadi Akulta eikä Roopelta ylimääräisiä varmennuksia: Akulle riittää, kun hän tarkastaa jokaisen saamansa paketin varmennusavaimella. Myöskään Roopen ei tarvitse itse tehdä mitään valmisteluja, ylimääräisiä paketteja voidaan laittaa sekaan automaattisesti vaikkapa 10 jokaista oikeaa pakettia kohti. Todennäköisyys, että satunnaisesti arvottu varmennusluku vastaisi satunnaisesti arvottua sisältöä ja että molemmat vastaisi käytettyä varmennusalgoritmia, on olematon. Ja mikäli näin pääsisi käymään, voisi Roope lähettää viestin uudelleen. Crypto.Protocol.Chaffing-moduulissa on seuraavat toiminnalliset rakenteet: class Chaff(factor=1.0, blocksper=1) Luokkarakenne, joka mahdollistaa ylimääräisten pakettien luomisen. Määrittelyssä annetaan kaksi parametria: factor, jolla määrätään kuinka monelle alkuperäiselle paketille lisätään ylimääräisiä paketteja. Lukuarvo annetaan prosenttikertoimena välillä 0.0 ja 1.0; oletusarvo on 1.0. Arvolla blocksper määrätään, kuinka monta ylimääräistä pakettia jokaista oikeaa pakettia kohti tehdään; oletusarvo on 1. 12

14 Chaff- rakenteella on seuraavat metodit: chaff(blocks) Python kryptausopas Lisää ylimääräisiä paketteja viestiosioon. blocks on lista 3-tupleja, jotka ovat muotoa (sarjanumero,data,mac). Metodi palauttaa samalla tavalla muotoillut listan, johon on lisätty alustusparametrien mukaisesti ylimääräisiä paketteja. Nämä paketit on luotu satunnaisesti annetun datan pohjalta. randnum(size) Palauttaa satunnaisesti generoituja tavujoukkoja jotka ovat size tavua pitkiä. Moduuli luottaa omaan satunnaisgeneraattoriinsa, koska Pythonin oma generaattori ei ole riittävän satunnainen, jonka seurauksena sillä luoduista paketeista voidaan nähdä tiettyjä toistuvia kuvioita. Näiden kuvioiden takia pakettien tunnistaminen olisi helppoa, ja siksi modulin mukana toimitetaan oma tehokkaampi satunnaislukugeneraattori. 13

15 Crypto.PublicKey: Julkisen avaimen algoritmeja Alkuperäinen lähde Python Crypthography Toolkit Manual, Tähän asti kaikki käyttämämme algoritmit ovat olleet yhteisen avaimen salausalgoritmeja. Tämä tarkoittaa siis sitä, että viestit puretaan ja pakataan samalla avaimella, joten kaikkien viestejä lähettävien ja vastaanottavien tulee tuntea tämä avain. Tähän juuri liittyykin seuraava ongelma: jos haluamme viestiä epäluotettavan verkon yli, voimme tietenkin salata viestimme, mutta kuinka alun perin aioimme saada avaimen perille jos oletamme että emme pysty sitä muilla keinoilla siirtämään? Emme voi lähettää avainta sähköpostilla, koska silloin se menisi selkokielisenä verkon yli, emmekä voi salata sitä toisella avaimella, koska tämäkin avain olisi lähetettävä selkokielisenä. Joutuisimme fyysisesti menemään paikan päälle viemään avaimen, ja tässä taas ei ole mitään järkeä. Toinen vaihtoehto olisi käyttää julkisia salausavaimia hyödyntäviä salausalgoritmeja. Käytettäessä julkisia avaimia, tuottaa salausalgoritmi kaksi erilaista avainta salauksia varten. Tiedon salaamista varten luodaan julkinen avain (public key) ja purkamista varten salainen avain (private key). Salauksessa käytettävää julkista avainta voidaan jakaa verkossa vapaasti, kun taas salainen avain tulee säilyttää turvallisessa paikassa. Jos joku haluaa lähettää sinulle varmennettua tietoa, hän voi salata viestin sinun julkisella avaimellasi. Koska julkista avainta ei voida käyttää sillä luodun viestin purkamiseen, voit ainoastaan sinä purkaa viestin omalla salaisella avaimellasi. Jotkin avainparit on lisäksi suunniteltu siten, että niillä voidaan tietoa salata ristiin molempiin suuntiin. Näitä julkisen avaimen algoritmeja voidaan käyttää tiedon lähettämisen lisäksi myös viestien allekirjoitukseen: koska avaimia voidaan käyttää ristiin kumpaankin suuntaan - eli siten että salaisella avaimella salattua tietoa voidaan purkaa julkisella avaimella voit salata viestin salaisella avaimellasi, ja vastaanottaja varmentaa allekirjoituksen purkamalla sen julkisella avaimella. Yleisesti julkisen avaimen salausalgoritmit toimivat siten, että salainen avain on vaikea päätellä julkisesta avaimesta. Tämä ei kuitenkaan ole mahdotonta mikäli resursseja on riittävästi, joten ainoa keino suojautua tältä on tehdä avaimesta riittävän pitkä. On kuitenkin pidettävä mielessä, että avaimen pituus kannattaa valita siten, että avaimen koko on vielä kohtuullinen, jotta salauksen käyttö olisi mielekästä. 14

16 Python Cryptography Toolkit sisältää seuraavat julkisen avaimen algoritmit: Algoritmi Käytettävyys RSA Salaus, varmennus/allekirjoitus ElGamal Salaus, varmennus/allekirjoitus DSA varmennus/allekirjoitus qnew varmennus/allekirjoitus Useimmat näistä algoritmeista on kaupalliseen käyttöön patentoituja. Mikäli käytät niitä projekteissasi, on suositeltavaa, että tarkastat niiden lisenssiehdot verkosta. Seuraavaksi tutustumme tarkemmin RSA-salausalgoritmiin esimerkin avulla: >>> from Crypto.Hash import MD5 >>> from Crypto.PublicKey import RSA >>> from Crypto.Util.randpool import RandomPool >>> lukulista = RandomPool() >>> RSAavain = RSA.generate(512, lukulista.get_bytes) >>> tarkastusluku = MD5.new("Joku porho kehui repineensä puukaupoilla niin paljon tuohta että heikkolatvaisia puistatti.").digest() >>> tunniste=rsaavain.sign(tarkastusluku,"") >>> tunniste ( L,) >>> RSAavain.verify(tarkastusluku,tunniste) 1 >>> RSAavain.verify(tarkastusluku[:-1],tunniste) 0 >>> Ohjelma toimii siten, että me tarvitsemme kolme asiaa: Tarkastuslukualgoritmin, joksi valitsimme MD5-algoritmin, avainalgoritmin, joksi valitsimme RSA:n sekä satunnaisgeneraattorin, joka otettiin moduulista Crypto.Util.randpool. Ensin loimme uuden satunnaislukujoukon lukulista, ja annoimme sen RSA-algoritmille, joka loi uuden 512-bittisen avainparin. Tämän jälkeen teimme selkotekstistämme MD5-tarkastusluvun. Seuraavaksi allekirjoitimme MD5-tarkastusluvun juuri luomallamme RSA-avaimella. Saatu tunniste on pitkä kokonaisluku, jonka lopuksi varmistimme verify-funktiolla. Huomaa, että alempana jätimme pois tarkastusluvun viimeisen merkin, jolloin tunniste ei enää vastannut tarkastuslukua. Voimme testata ohjelman avainparien toimintaa vielä toisella esimerkillä: >>> Julkinen = RSAavain.publickey() >>> selkoteksti = "Uniikki unikorni olikin korni koni." >>> viesti = Julkinen.encrypt(selkoteksti,"") >>> viesti ('Mr\xa3\x84\xe8\xddfv\n\x020\xec\x1a\xce\xdaKf\xfe\x1c\x97\xca?\xfc \x898\x8b\x a8\x1d\xe5\x8b\x1d)&&\xf0\x18\x124@=\xfd\x93\xd6\x9e{\xdek\xbff]\xb4"lb$\xcd\xe4 \x15\x8f\xdal\xa8\x03',) >>> RSAavain.decrypt(viesti) 'Uniikki unikorni olikin korni koni.' >>> allekirjoitus = RSAavain.decrypt("Uka Naakka") 15

17 >>> allekirjoitus ' \x89\xf3\x10\xbf\x96w\xe2\x96{n\xf5\x93j\xc4\xfc\xc1\xde\x9c\x97\x1b\xa5\xd2\x8f g\x98\x11 -\xb1\xe5\xbb\x98\xfe\xaf\xc9\x03\xe3\xf8f\xf5i\x0b' >>> Julkinen.encrypt(allekirjoitus,"") ('Uka Naakka',) >>> Nyt loimme RSAavaimesta julkisen avaimen, jolla salasimme viestin Vesihiisi. Käyttämämme salainen avain pystyi purkamaan viestin ilman ongelmia. Vastaavasti allekirjoitus sujui ilman ongelmia: ensin allekirjoitimme eli periaatteessa purimme tekstin Uka Naakka, jonka julkinen avain onnistui kokoamaan eli periaatteessa salaamaan oikein siten, että allekirjoitus tuli näkyviin. Julkisen avaimen salausalgoritmit sisältävät seuraavat yhteiset metodit: generate(size, randfunc, progress_func=none) Luo uuden avainparin. Avaimet ovat kokoluokkaa size, ja niiden luomisessa käytetään satunnaislukugeneraattoria randfunc. Käytettävän satunnaislukugeneraattorin tulee toimia siten, että se saa kutsussa parametrina yhden integer-arvon ja palauttaa näin monta satunnaista merkkiä. Esimerkkitehtävässä käyttämämme RandPool.get_bytes on hyvä generaattori: Älä käytä Pythonin omaa random-satunnaislukugeneraattoria. canencrypt() Palauttaa arvon True jos valittu avainalgoritmi pystyy purkamaan ja salaamaan tietoa. cansign() Palauttaa arvon True jos valittu avainalgoritmi pystyy allekirjoittamaan tietoa.. decrypt(tuple) Purkaa tuplen salaisella avaimella, palauttaa merkkijonon. encrypt(string, K) Salaa merkkijonon string salaisella avaimella. Parametrin K tulisi sisältää satunnaisia merkkejä joita ohjelma voi käyttää salauksessa apunaan. hasprivate() Palauttaa arvon True jos salausobjektille on syötetty salainen avain. publickey() Palauttaa uuden julkisen avaimen jolla on mahdollista salata tietoa salaisella avaimella purettavaksi. sign(string, K) Allekirjoittaa merkkijonon string palauttaen allekirjoituksen joka on muotoa tuple. Parametriin K tulee syöttää satunnaisia merkkejä, joiden avulla allekirjoitus tehdään. size() Palauttaa suurimman mahdollisen merkkijonon koon bitteinä, joka pystytään salaamaan tai allekirjoittamaan. Mikäli luku ei ole jaollinen kahdeksalla, on suurin mahdollinen koko merkkeinä palautettu arvo jaettuna kahdeksalla pyöristettynä alaspäin verify(string, signature) Palauttaa arvon True jos allekirjoitus signature vastaa annettua merkkijonoa string. Muutoin palauttaa arvon False. Lisäksi osalla salausalgoritmeista (Kuten ElGamal ja DSA) on omia lisätoimintoja, mutta niistä voit lukea tarkemmin alkuperäisestä manuaalista [2]. 16

18 Huomioita turvallisuudesta Python kryptausopas Mikä tahansa näistä algoritmeista voidaan periaatteessa purkaa triviaalisti: Esimerkiksi käyttämämme RSA-algoritmi voidaan purkaa helposti kokeilemalla kaikki alkulukuparit välillä kahdesta n:ään. Nämä arvot voidaan löytää helposti seuraavanlaisella koodilla: for i in range(2, n): if (n%i)==0: print i, 'is a factor' ; break Kannattaa kuitenkin huomata, että n on tavallisesti muutamia satoja bittejä pitkä, joten ohjelma ei luultavimmin löydä ratkaisussa käytettäviä lukuja ennen kuin aurinko sammuu lopullisesti. Älykkäämmät algoritmit löytävät ratkaisuja hieman nopeammin, mutta siitäkään huolimatta ratkaisuja ei löydetä järkevässä ajassa. Lisäksi ElGamal ja DSA käyttä diskreetteja logaritmejä, mutta niilläkin ajatus on sama. Turvallinen avainkoko riippuu murtamisessa käytetystä laitteistosta. Nykyisellä laitekannalla alkulukupohjaisen algoritmin avaimille 512 bittiä riittää kotikäytössä sekä 768 yritysmaailman tarpeisiin bittinen avain alkaa lähestyä sotilastiedustelutason salausavainta, ja on kotikäytössä jo tarpeettoman vahva. ElGamal- tai DSA-algoritmit ovat logaritmipohjaisia, joten niiden yhteydessä on suositeltavaa kertoa nämä avainkoot kahdella. 17

19 Crypto.Util: Muita työkaluja Alkuperäinen lähde Python Crypthography Toolkit Manual, Tässä luvussa käsittelemme niitä osia Python Cryptography Toolkitistä, jotka eivät sovi muihin kategorioihin. Crypto.Util.number Tämä moduulin osa sisältää työkaluja, joilla voidaan toteuttaa salauksessa tarvittavia matemaattisia funktioita. GCD(x,y) Palauttaa x:n ja y:n suurimman yhteisen nimittäjän. getprime(n, randfunc) Palauttaa N-bittisen satunnaisen alkuluvun käyttäen apunaan käyttäjän määrittelemää satunnaislukugeneraattoria randfunc. Tällaisena satunnaislukugeneraattorina voidaan käyttää vaikkapa RandPool.get_bytes generaattoria. getrandomnumber(n, randfunc) Muuten sama kuin yllä, mutta palauttaa N-bittisen satunnaisluvun, joka ei välttämättä ole alkuluku. inverse(u, v) Palauttaa u:n jakojäännös v:stä laskutoimituksen käänteisarvon. isprime(n) Palauttaa arvon True jos N on alkuluku. Testaus suoritetaan Rabin-Miller-testillä. Crypto.Util.randpool Kryptografian tarkoituksiin joudutaan usein tuottamaan erillisiä satunnaislukugeneraattoreita juuri siitä syystä, että normaalit satunnaislukugeneraattorit eivät ole riittävän satunnaisia. Tämä taas aiheuttaa tilanteen, jossa seuraamalla pitkällä aikavälillä satunnaislukugeneraattorin toimintaa, voidaan sen tuottamia lukuja alkaa arvaamaan, ja pitkäaikaisen kertymän avulla jopa tunnistaa, miten satunnaislukuja on tuotettu. Tämä on ongelmallista, koska mikäli pystymme tietämään mitä lukuja tulevilla kierroksilla luultavasti esiintyy sekä miten generaattori toimii, voimme luoda tulevia avaimia ennen niiden käyttöönottoa. Tätä vastaan voidaan kuitenkin toimia käyttämällä satunnaislukuina salaus- tai tarkastuslukualgoritmin läpi ajettuja satunnaislukuja: tällöin satunnaislukujen ennustaminen on yhtä vaikeaa kuin itse algoritmin murtaminen. Käytettäessä satunnaislukugeneraattoreita tulisi entropian konsepti ymmärtää mahdollisimman hyvin. Entropialla tarkoitetaan tässä tapauksessa satunnaisuuden määrää järjestelmässä, ja sen mitääyksikkönä käytetään tavallisesti bittejä. Jos meillä on käytössämme yksi satunnainen bitti, on 18

20 sen entropia silloin yhden bitin verran, vastaavasti yhden satunnaisen tavun entropia on 8 bittiä. Entäpä jos meillä on käytössä tietokannan kenttä, johon valitaan henkilön sukupuolen mukaan M tai N? Vaikka yhden merkin luontainen entropia on 8 bittiä, on meillä siitäkin huolimatta käytössämme ainoastaan kaksi valintaa, jolloin entropia pienenee yhteen bittiin. Jos ajaisimme tälle yhden tavun kokoiselle kentälle tarkastusluvun joka ilmaistaan 128 bitillä, olisiko entropia silloin 128 bittiä? Ei tietenkään, koska kenttä voi tuottaa ainoastaan kaksi erilaista tarkastuslukua, joten sen entropia on edelleen yksi bitti. Jos yrittäisit rikkoa salausta, voisit tästä kohdasta päätellä kentän tarkastuslukua vastaavan arvon olevan joko M tai N. Koska kenttä ei hyväksy muita vaihtoehtoja - kuten A, H tai K - ei sinun tarvitse myöskään kokeilla niitä. Tämä sääntö pätee myös luonnolliseen kieleen: esimerkiksi englanninkielisessä tekstissä kuuden merkin entropia on huomattavasti vähemmän kuin 6*8 eli 48 bittiä. Koska selkokielessä ei käytetä kaikkia kombinaatioita kuten zd3yfx tai KMH,DB, on arvo huomattavasti vähemmän kuin kaikkien teoreettisten kombinaatioiden summa. Kuinka tämä sitten liittyy satunnaislukugeneraattoreihin? Me haluamme järjestelmään riittävästi entropiaa, että emme joudu alttiiksi hyökkäyksille. Esimerkiksi voisimme tehdä ohjelman, joka arpoo käyttäjille mitään tarkoittamattomia salasanoja: idea olisi hyvä, koska järjestelmä estäisi käyttäjiä valitsemasta itsestään selviä salasanoja, kuten etunimiä, nimikirjaimia tai lemmikkieläinten nimiä. Jos satunnaisgeneraattorimme kuitenkin toimisi siten, että se arpoisi 32 alkuosan joukosta alun, 32 toisen osan joukosta keskiosan ja loppuun vielä numeron väliltä 0-32 tyyliin mik-dak-23 tai rip-zok-11, saisimme varmaan turvallisen salasanan? Emme saisi, sillä oikeasti erilaisia salasanoja olisi ainoastaan 32*32*32 eli erilaista. Tämä määrä olisi täysin riittämätön suojaamaan järjestelmäämme ja käytännössä oikeilla työkaluilla triviaalisti rikottavissa. Vielä 32-bittinen RSA-avain, jossa on noin 4.2 miljardia erilaista kombinaatiota, on riittämätön puhuttaessa vakavasta tietoturvauhasta. Joka tapauksessa, randpool moduuli toteuttaa tehokkaan satunnaislukugeneraattorin RandomPool-rakenteen avulla. Tämä satunnaislukugeneraattori pitää kirjaa generaattorista poistuneesta entropiasta ja tasapainottaa sen määrää sisäisten funktioidensa avulla. Lisäksi kirjasto osaa myös kerätä aidosti satunnaista kohinaa mm. käyttäjän näppäinpainallusten tarkkaa aikaa ja painettua nappia hyödyntämällä. RandomPool([numbytes, cipher, hash]) RandomPool-objekti voidaan halutessa luoda kokonaan ilman parametreja edellisessä luvussa olleen esimerkin tavoin. Parametrilla numbytes voidaan säätää satunnaislukugeneraattorin luomien lukujen määrää, ja parametrilla hash voidaan valita tarkastuslukufunktio, jolla satunnaislukujoukkoa sekoitetaan. Parametri cipher on poistunut käytöstä version 1.1 jälkeen, mutta se on edelleen sisällytetty funktiokutsuun. Sen voi jättää tyhjäksi. RandomPool objekteilla on seuraavia muuttujia sekä metodeja: addevent(time[, string]) Syöttää satunnaistietoa generaattorille. Parametriksi time kannattaa antaa senhetkinen kellonaika, parametriksi string satunnaista tekstiä tai merkkijonoja. Hyvä keino on esimerkiksi ohjata käytettyjä tarkastuslukuja tai satunnaisten muistiosoitteiden tietoja generaattoriin, koska nämä ovat tietoa jota ei yleisesti voida käyttää generaattorin murtamiseen. Paluuarvona palautuu järjestelmän uusi entropia-arvo self.entropy. 19

21 bits Integer-arvo, joka kertoo kuinka monta tavua satunnaislukuja generaattori sisältää. Käytännössä arvo on bytes-arvo jaettuna kahdeksalla ja pyöristettynä alaspäin. bytes Integer-arvo, joka kertoo kuinka monta bittiä satunnaisdataa generaattorissa on. entropy Integer-arvo, joka kertoo kuinka paljon entropiaa satunnaislukugeneraattori sisältää. addevent() kasvattaa arvoa, getbytes laskee sitä. getbytes(num) Palauttaa merkkijonon jossa on num tavua satunnaista tietoa. Metodi ei aiheuta virhettä, vaikka satunnaisgeneraattorin entropia-arvo olisikin nolla tai pääsisi menemään nollaan. Tämä käytännössä vain tarkoittaisi sitä, että generaattorin luvut eivät enää ole täysin satunnaisia. Riittävän entropian säilyttäminen jätetäänkin käyttäjän vastuulle. stir() Sekoittaa satunnaislukulistaa käyttäen alustuksessa määrättyä tarkastuslukufunktiota. On suositeltavaa, että stir-metodia käytetään aina, kun generaattoriin lisätään lukuja addevent()-metodilla tai kun sieltä otetaan lukuja getbytes-metodilla. PersistentRandomPool-rakenne on alirakenne RandomPool:ille, joka mahdollistaa generaattorin sisällön lataamisen ja tallentamisen levyltä sekä kyvyn luoda satunnaisdataa näppäimistöpainalluksista. Rakenteella on muuten samat ominaisuudet, mutta seuraavissa toiminnoissa on eroavaisuuksia: PersistentRandomPool([filename, numbytes, cipher, hash]) Käytännössä sama kuin RandomPool, mutta ottaa lisäksi tiedostonnimen, josta generaattorin sisältö luetaan. Jos tiedostoa ei ole olemassa, sellainen luodaan ja generaattori alustetaan normaalisti. Jos tiedostonnimeä ei anneta, toimii rakenne kuten RandomPool-rakenne. randomize() (Unix -järjestelmäkohtainen) Ottaa satunnaistietoa käyttäjältä. Pyytää käyttäjää painamaan näppäimistön satunnaisia kirjaimia, joista muodostaa aidosti satunnaista tietoa generaattorille. save() Tallentaa generaattorin sisällön alustuksessa määriteltyyn tiedostoon. 20

22 Loppusanat Tässä on tällä erää kaikki, mitä Python Cryptography Toolkitin käyttöopas piti sisällään. Mikäli kiinnostuit salaustekniikoista tai niiden hyödyntämisestä omien ohjelmiesi parissa, kannattaa sinun tutustua PCT:n kotisivuilta [2] saatavilla oleviin esimerkkikoodeihin, joissa teknisesti pidemmälle menneiden esimerkkien avulla opetetaan käytännössä työkalun käyttöä. Tavallisesti salausalgoritmeja käytetään pääasiassa tietoliikennetekniikassa, joten et vielä tässä vaiheessa saanut oppaasta muuta irti kuin että pääsit alkuun erilaisten salausavainten kanssa. Kun jatkossa tutustut tietoliikenneohjelmointiin ja viestinvaihtoon, olet jo valmiiksi opetellut käyttämään tietoliikenteen salauksessa tarvittavia asioita. Lisäksi voit tietenkin soveltaa oppaan ohjeita, ja salata työasemaltasi tietoja, joiden et halua päätyvän muiden nähtäville. Kuitenkin kannattaa muistaa, että tärkein lähtökohta tietoturvassa ei ole mahdollisimman vahvan salausalgoritmin käyttäminen, vaan nimenomaan salasanan valinta: paraskaan algoritmi ei auta sinua, jos salasanasi on heikko tai itsestään selvä. Älä käytä omaa nimeäsi, nimikirjaimiasi, syntymäaikaasi, puolison nimeä tai lemmikkien kutsumanimiä salasanoina. Hyvässä salasanassa on aina sekaisin isoja ja pieniä kirjaimia sekä numeroita eikä se tarkoita mitään. On tietenkin ymmärrettävää, että tällaisen salasanan muistaminen on vaikeaa. Älä kuitenkaan kirjoita salasanaa lapulle ja jätä sitä mihinkään itsestään selvään paikkaan, kuten näppäimistön tai työtason alle tai avoimeen työpöydän laatikkoon. Jos ehdottomasti haluat kirjoittaa salasanan ylös, niin säilytä lappua edes lukitussa laatikossa, johon ainoastaan sinulla on avain, tai talleta se kännykkääsi SIMkortille viesteihin tai kontaktitietoihin ilman muita lisätietoja: luultavasti et anna sellaisten tahojen selata kännykkääsi joiden et myöskään haluaisi käyttävän tietokonettasi. Ja mikäli kännykkäsi häviää, lukittuu salasana SIM-kortin sisään kun kuoletat liittymäsi. Äläkä tietenkään kerro kenellekään, että olet tallentanut työaseman salasanasi kännykäsi viesteihin. Useimmiten tietoturva onkin juuri tämänkaltaisia pieniä asioita. Vahvimmatkin salaukset voidaan ohittaa luottamalla käyttäjien virheisiin, joten huolehdi että et vahingossa itse aiheuta suurinta tietoturvariskiä omalle työasemallesi. Siihen ei auta edes ElGamal-suojauksella allekirjoitettu MD5- tarkastussumma. 21

23 Lähteet [1] Kasurinen, Jussi (2006) Python-ohjelmointiopas., versio 1. Tietotekniikan käsikirjat 7, Lappeenrannan teknillinen yliopisto. [2] Kuchling, A.M. (2007) Python Cryptography Toolkit Manual. Viitattu Saatavilla osoitteesta [3] Kasurinen, Jussi (2007) Python grafiikkaohjelmointi Imaging Librarylla. Tietotekniikan käsikirjat 8, Lappeenrannan teknillinen yliopisto. [4] Kuchling, A.M. (2006), Python Enhancement Proposal 247: API for Cryptographic Hash Functions. Saatavilla osoitteesta viitattu [5] Kuchling, A.M. (2006), Python Enhancement Proposal 272: API for Block Encryption Algorithms. Saatavilla osoitteesta viitattu

24 Lisenssiehdot Kannen kuva: Nila Gurusinghe. Kuva julkaistu Creative Commons - Nimi mainittava lisenssillä. Tähän asiakirjaan sovelletaan Creative Commonsin Vapaa Yleinen Käyttö (Public Domain) lisenssiä. Esimerkit ja muut tehtävät on suunniteltu siten, että niiden käytöstä ei pitäisi koitua ongelmia, mutta siitäkin huolimatta lopullinen vastuu tehtävien ajamisesta jätetään lukijalle. Oppaan tekemiseen osallistuneet henkilöt tai eivät vastaa mahdollisista ongelmista, vahingoista, vioista, tappioista tai tuotannonmenetyksistä. Lappeenrannan teknillinen yliopisto

Tietoturvan perusteet - Syksy 2005. SSH salattu yhteys & autentikointi. Tekijät: Antti Huhtala & Asko Ikävalko (TP02S)

Tietoturvan perusteet - Syksy 2005. SSH salattu yhteys & autentikointi. Tekijät: Antti Huhtala & Asko Ikävalko (TP02S) Tietoturvan perusteet - Syksy 2005 SSH salattu yhteys & autentikointi Tekijät: Antti Huhtala & Asko Ikävalko (TP02S) Yleistä SSH-1 vuonna 1995 (by. Tatu Ylönen) Korvaa suojaamattomat yhteydentottotavat

Lisätiedot

Tietoturva 811168P 5 op

Tietoturva 811168P 5 op 811168P 5 op 6. Oulun yliopisto Tietojenkäsittelytieteiden laitos Mitä se on? on viestin alkuperän luotettavaa todentamista; ja eheyden tarkastamista. Viestin eheydellä tarkoitetaan sitä, että se ei ole

Lisätiedot

Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen

Enigmail-opas. Asennus. Avainten hallinta. Avainparin luominen Enigmail-opas Enigmail on Mozilla Thunderbird ja Mozilla Seamonkey -ohjelmille tehty liitännäinen GPG-salausohjelmiston käyttöä varten. Sitä käytetään etenkin Thunderbirdin kanssa sähköpostin salaamiseen

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.2.2010 1 / 46 Merkkijonot Merkkijonojen avulla ohjelmassa voi esittää tekstitietoa, esim. nimiä, osoitteita ja

Lisätiedot

SALAUSMENETELMÄT. Osa 2. Etätehtävät

SALAUSMENETELMÄT. Osa 2. Etätehtävät SALAUSMENETELMÄT Osa 2 Etätehtävät A. Kysymyksiä, jotka perustuvat luentomateriaaliin 1. Määrittele, mitä tarkoitetaan tiedon eheydellä tieoturvan yhteydessä. 2. Määrittele, mitä tarkoittaa kiistämättömyys

Lisätiedot

Ongelma 1: Miten tieto kannattaa koodata, jos sen halutaan olevan hyvin vaikeasti luettavaa?

Ongelma 1: Miten tieto kannattaa koodata, jos sen halutaan olevan hyvin vaikeasti luettavaa? Ongelma 1: Miten tieto kannattaa koodata, jos sen halutaan olevan hyvin vaikeasti luettavaa? 2012-2013 Lasse Lensu 2 Ongelma 2: Miten tietoa voidaan (uudelleen)koodata tehokkaasti? 2012-2013 Lasse Lensu

Lisätiedot

Salakirjoitusmenetelmiä

Salakirjoitusmenetelmiä Salakirjoitusmenetelmiä LUKUTEORIA JA LOGIIKKA, MAA 11 Salakirjoitusten historia on tuhansia vuosia pitkä. On ollut tarve lähettää viestejä, joiden sisältö ei asianomaisen mielestä saanut tulla ulkopuolisten

Lisätiedot

Option GlobeSurfer III pikakäyttöopas

Option GlobeSurfer III pikakäyttöopas Option GlobeSurfer III pikakäyttöopas Laitteen ensimmäinen käyttöönotto 1. Aseta SIM-kortti laitteen pohjaan pyötätuen takana olevaan SIM-korttipaikkaan 2. Aseta mukana tullut ethernetkaapeli tietokoneen

Lisätiedot

RSA-salakirjoitus. Simo K. Kivelä, Apufunktioita

RSA-salakirjoitus. Simo K. Kivelä, Apufunktioita Simo K. Kivelä, 25.1.2005 RSA-salakirjoitus Ron Rivest, Adi Shamir ja Leonard Adleman esittivät vuonna 1978 salakirjoitusmenettelyn, jossa tietylle henkilölle osoitetut viestit voidaan salakirjoittaa hänen

Lisätiedot

Harjoitustyö: virtuaalikone

Harjoitustyö: virtuaalikone Harjoitustyö: virtuaalikone Toteuta alla kuvattu virtuaalikone yksinkertaiselle olio-orientoituneelle skriptauskielelle. Paketissa on testaamista varten mukana kaksi lyhyttä ohjelmaa. Ohjeita Noudata ohjelman

Lisätiedot

Tietoturvatekniikka Ursula Holmström

Tietoturvatekniikka Ursula Holmström Tietoturvatekniikka Ursula Holmström Tietoturvatekniikka Tietoturvan osa-alueet Muutama esimerkki Miten toteutetaan Eheys Luottamuksellisuus Saatavuus Tietoturvaterminologiaa Luottamuksellisuus Eheys Saatavuus

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 15.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 15.3.2010 1 / 56 Tiedostoista: tietojen tallentaminen ohjelman suorituskertojen välillä Monissa sovelluksissa ohjelman

Lisätiedot

Yritysturvallisuuden perusteet. 11. Luento Tietotekninen turvallisuus

Yritysturvallisuuden perusteet. 11. Luento Tietotekninen turvallisuus Yritysturvallisuuden perusteet Teemupekka Virtanen Helsinki University of Technology Telecommunication Software and Multimedia Laboratory teemupekka.virtanen@hut.fi 11. Luento Tietotekninen turvallisuus

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 7. huhtikuuta 2017 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille. Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen

Lisätiedot

Koostanut Juulia Lahdenperä ja Rami Luisto. Salakirjoituksia

Koostanut Juulia Lahdenperä ja Rami Luisto. Salakirjoituksia Salakirjoituksia Avainsanat: salakirjoitus, suoraan numeroiksi, Atblash, Caesar-salakirjoitus, ruudukkosalakirjoitus, julkisen avaimen salakirjoitus, RSA-salakirjoitus Luokkataso: 3.-5. luokka, 6.-9. luokka,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 9.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 9.2.2009 1 / 35 Listat Esimerkki: halutaan kirjoittaa ohjelma, joka lukee käyttäjältä 30 lämpötilaa. Kun lämpötilat

Lisätiedot

Nimittäin, koska s k x a r mod (p 1), saadaan Fermat n pienen lauseen avulla

Nimittäin, koska s k x a r mod (p 1), saadaan Fermat n pienen lauseen avulla 6. Digitaalinen allekirjoitus Digitaalinen allekirjoitus palvelee samaa tarkoitusta kuin perinteinen käsin kirjotettu allekirjoitus, t.s. Liisa allekirjoittaessaan Pentille lähettämän viestin, hän antaa

Lisätiedot

Salaustekniikat. Kirja sivut: ( )

Salaustekniikat. Kirja sivut: ( ) Salaustekniikat Kirja sivut: 580-582 (647-668) Johdanto Salaus on perinteisesti ollut salakirjoitusta, viestin luottamuksellisuuden suojaamista koodaamalla viesti tavalla, jonka vain vastaanottaja(t) pystyy

Lisätiedot

Koostaneet Juulia Lahdenperä ja Rami Luisto. Enigma. Kuvaus: Johdanto salakirjoituskone Enigman saloihin sekä välineet oman Enigman valmistamiseen.

Koostaneet Juulia Lahdenperä ja Rami Luisto. Enigma. Kuvaus: Johdanto salakirjoituskone Enigman saloihin sekä välineet oman Enigman valmistamiseen. Enigma Avainsanat: Enigma, salaus, salakirjoitus Luokkataso: 6.-9. luokka, lukio Välineet: haaraniitti, pohjat (liitteenä) Kuvaus: Johdanto salakirjoituskone Enigman saloihin sekä välineet oman Enigman

Lisätiedot

Tietoturvan Perusteet : Tiedon suojaaminen

Tietoturvan Perusteet : Tiedon suojaaminen 010627000 Tietoturvan Perusteet : Tiedon suojaaminen Pekka Jäppinen September 26, 2007 Pekka Jäppinen, Lappeenranta University of Technology: September 26, 2007 Suojausmenetelmät Tiedon Salaaminen (kryptografia)

Lisätiedot

Kvanttiavainjakelu (Kvantnyckeldistribution, Quantum Key Distribution, QKD)

Kvanttiavainjakelu (Kvantnyckeldistribution, Quantum Key Distribution, QKD) Kvanttiavainjakelu (Kvantnyckeldistribution, Quantum Key Distribution, ) Iikka Elonsalo Elektroniikan ja nanotekniikan laitos 4.5.2017 Sisältö Kryptografia Kvanttiavainjakelu 2/27 4.5.2017 Kryptografia

Lisätiedot

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma:

Kerta 2. Kerta 2 Kerta 3 Kerta 4 Kerta 5. 1. Toteuta Pythonilla seuraava ohjelma: Kerta 2 Kerta 3 Kerta 4 Kerta 5 Kerta 2 1. Toteuta Pythonilla seuraava ohjelma: 2. Tulosta Pythonilla seuraavat luvut allekkain a. 0 10 (eli, näyttää tältä: 0 1 2 3 4 5 6 7 8 9 10 b. 0 100 c. 50 100 3.

Lisätiedot

Loppukäyttäjän ohje Asennus- ja käyttöohje Mac

Loppukäyttäjän ohje Asennus- ja käyttöohje Mac Loppukäyttäjän ohje Asennus- ja käyttöohje Mac Fujitsun mpollux DigiSign Client on kortinlukijaohjelmisto, jonka avulla voit kirjautua luotettavasti ja turvallisesti organisaation tietoverkkoon tai sähköiseen

Lisätiedot

Kryptologia Esitelmä

Kryptologia Esitelmä Kryptologia p. 1/28 Kryptologia Esitelmä 15.4.2011 Keijo Ruohonen keijo.ruohonen@tut.fi Kryptologia p. 2/28 Kryptologian termejä Kryptaus: Tiedon salaus käyttäen avainta Dekryptaus: Salauksen purku käyttäen

Lisätiedot

Luento 11: Tiedonsiirron turvallisuus: kryptografiaa ja salausavaimia. Syksy 2014, Tiina Niklander

Luento 11: Tiedonsiirron turvallisuus: kryptografiaa ja salausavaimia. Syksy 2014, Tiina Niklander Tietoliikenteen perusteet Luento 11: Tiedonsiirron turvallisuus: kryptografiaa ja salausavaimia Syksy 2014, Tiina Niklander Kurose&Ross: Ch 8 Pääasiallisesti kuvien J.F Kurose and K.W. Ross, All Rights

Lisätiedot

NÄIN TOIMII. alakirjoituksen historia ulottuu tuhansien

NÄIN TOIMII. alakirjoituksen historia ulottuu tuhansien NÄIN TOIMII MTÅRVCC KRYPTA Verkkopankissa asiointi olisi mahdotonta ilman teknisiä salausmenetelmiä. Tietoturvasta huolestunut kotikäyttäjä voi suojata myös tärkeät tiedostonsa tehokkaalla salauksella.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 12.4.2010 T-106.1208 Ohjelmoinnin perusteet Y 12.4.2010 1 / 34 Graafiset käyttöliittymät Tähän asti kirjoitetuissa ohjelmissa on ollut tekstipohjainen käyttöliittymä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print

Lisätiedot

RSA-salausmenetelmä LuK-tutkielma Tapani Sipola Op. nro Matemaattisten tieteiden laitos Oulun yliopisto Syksy 2017

RSA-salausmenetelmä LuK-tutkielma Tapani Sipola Op. nro Matemaattisten tieteiden laitos Oulun yliopisto Syksy 2017 RSA-salausmenetelmä LuK-tutkielma Tapani Sipola Op. nro. 1976269 Matemaattisten tieteiden laitos Oulun yliopisto Syksy 2017 Sisältö Johdanto 2 1 Salausmenetelmien yleisiä periaatteita 3 2 Määritelmiä ja

Lisätiedot

Sähköpostitilin käyttöönotto. Versio 2.0

Sähköpostitilin käyttöönotto. Versio 2.0 Sähköpostitilin käyttöönotto Versio 2.0 Sivu 1 / 10 Jarno Parkkinen jarno@atflow.fi 1 Johdanto... 2 2 Thunderbird ohjelman lataus ja asennus... 3 3 Sähköpostitilin lisääminen ja käyttöönotto... 4 3.1 Tietojen

Lisätiedot

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin peruskurssi Y1 Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 16.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 16.2.2010 1 / 41 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 22. huhtikuuta 2016 Vastaa kaikkiin tehtäviin. Tee jokainen tehtävä erilliselle konseptiarkille! Kirjoittamasi luokat, funktiot ja aliohjelmat

Lisätiedot

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä

Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä Hyvä Salis Hyvän salasanan tunnusmerkit Hyökkääjästä salasanan pitää näyttää satunnaiselta merkkijonolta. Hyvän salasanan luominen: Luo mahdollisimman pitkä salasana. Jokainen salasanaan lisäämäsi kirjain

Lisätiedot

A274101 TIETORAKENTEET JA ALGORITMIT

A274101 TIETORAKENTEET JA ALGORITMIT A274101 TIETORAKENTEET JA ALGORITMIT SALAUKSEN PERUSTEITA Lähteet: Timo Harju, Opintomoniste Keijo Ruohonen, Kryptologia (math.tut.fi/~ruohonen/k.pdf) HISTORIAA Salausta on käytetty alkeellisella tasolla

Lisätiedot

Ohjeet asiakirjan lisäämiseen arkistoon

Ohjeet asiakirjan lisäämiseen arkistoon Ohjeet asiakirjan lisäämiseen arkistoon 1. Jos koneellesi ei vielä ole asennettu Open Office ohjelmaa, voit ladata sen linkistä joka löytyy Arkisto => Asiakirjapohjat sivulta seuran kotisivuilta. Jos ohjelma

Lisätiedot

Kryptografiset vahvuusvaatimukset luottamuksellisuuden suojaamiseen - kansalliset suojaustasot

Kryptografiset vahvuusvaatimukset luottamuksellisuuden suojaamiseen - kansalliset suojaustasot Ohje 1 (5) Dnro: 11.11.2015 190/651/2015 Kryptografiset vahvuusvaatimukset luottamuksellisuuden suojaamiseen - kansalliset suojaustasot 1 Johdanto Tässä dokumentissa kuvataan ne kryptografiset vähimmäisvaatimukset,

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 7.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 7.2.2011 1 / 39 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641)

Sukupuu -ohjelma. Ossi Väre (013759021) Joni Virtanen (013760641) Sukupuu -ohjelma Ossi Väre (013759021) Joni Virtanen (013760641) 7.11.2011 1 Johdanto Toteutimme C -kielellä sukupuuohjelman, johon käyttäjä voi lisätä ja poistaa henkilöitä ja määrittää henkilöiden välisiä

Lisätiedot

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan

Lisätiedot

RADAR - RANDOM DATA GENERATOR

RADAR - RANDOM DATA GENERATOR YLEISKUVAUS Radar on sovellus, jolla voi luoda näennäisen oikeaa satunnaisdataa testaus-, demo - ja muihin tarkoituksiin. TIEDUSTELUT Juha Levonen 050 372 5797 juha.levonen@kantapeikko.fi Osa datasta generoidaan

Lisätiedot

Tietoliikenteen perusteet

Tietoliikenteen perusteet Tietoliikenteen perusteet Luento 11: Tiedonsiirron turvallisuus: kryptografiaa ja salausavaimia Syksy 2015, Timo Karvi Kurose&Ross: Ch 8 Pääasiallisesti kuvien J.F Kurose and K.W. Ross, All Rights Reserved

Lisätiedot

Alkuun HTML5 peliohjelmoinnissa

Alkuun HTML5 peliohjelmoinnissa Paavo Räisänen Alkuun HTML5 peliohjelmoinnissa www.ohjelmoimaan.net Tätä opasta saa vapaasti kopioida ja levittää ei kaupallisissa tarkoituksissa. Sisällysluettelo 1: Alkusanat 2: Alkuun 3: Pelinäkymä

Lisätiedot

Tietoliikenteen salaaminen Java-sovelluksen ja tietokannan välillä

Tietoliikenteen salaaminen Java-sovelluksen ja tietokannan välillä Tietoliikenteen salaaminen Java-sovelluksen ja tietokannan välillä Miika Päivinen 13.12.2005 Joensuun yliopisto Tietojenkäsittelytiede Pro gradu -tutkielma TIIVISTELMÄ Sähköisen kanssakäymisen määrän lisääntyessä

Lisätiedot

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op) ITKP102 Ohjelmointi 1 (6 op) Tentaattori: Antti-Jussi Lakanen 12. huhtikuuta 2019 Tee kukin tehtävä omalle konseptiarkille. Noudata ohjelmointitehtävissä kurssin koodauskäytänteitä. Yksi A4-kokoinen lunttilappu

Lisätiedot

Johdatus Ohjelmointiin

Johdatus Ohjelmointiin Johdatus Ohjelmointiin Syksy 2006 Viikko 2 13.9. - 14.9. Tällä viikolla käsiteltävät asiat Peruskäsitteitä Kiintoarvot Tiedon tulostus Yksinkertaiset laskutoimitukset Muuttujat Tiedon syöttäminen Hyvin

Lisätiedot

WL54AP2. Langattoman verkon laajennusohje WDS

WL54AP2. Langattoman verkon laajennusohje WDS WL54AP2 Langattoman verkon laajennusohje WDS Näitä ohjeita seuraamalla saadaan langaton lähiverkko laajennettua yksinkertaisesti kahden tai useamman tukiaseman verkoksi. Tukiasemien välinen liikenne(wds)

Lisätiedot

Python-ohjelmointi Harjoitus 2

Python-ohjelmointi Harjoitus 2 Python-ohjelmointi Harjoitus 2 TAVOITTEET Kerrataan tulostuskomento ja lukumuotoisen muuttujan muuttaminen merkkijonoksi. Opitaan jakojäännös eli modulus, vertailuoperaattorit, ehtorakenne jos, input-komento

Lisätiedot

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014

Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Ohjelmoinnin jatkokurssi, kurssikoe 28.4.2014 Kirjoita jokaiseen palauttamaasi konseptiin kurssin nimi, kokeen päivämäärä, oma nimi ja opiskelijanumero. Vastaa kaikkiin tehtäviin omille konsepteilleen.

Lisätiedot

Matematiikan tukikurssi

Matematiikan tukikurssi Matematiikan tukikurssi Kurssikerta 1 1 Matemaattisesta päättelystä Matemaattisen analyysin kurssin (kuten minkä tahansa matematiikan kurssin) seuraamista helpottaa huomattavasti, jos opiskelija ymmärtää

Lisätiedot

7.4 Sormenjälkitekniikka

7.4 Sormenjälkitekniikka 7.4 Sormenjälkitekniikka Tarkastellaan ensimmäisenä esimerkkinä pitkien merkkijonojen vertailua. Ongelma: Ajatellaan, että kaksi n-bittistä (n 1) tiedostoa x ja y sijaitsee eri tietokoneilla. Halutaan

Lisätiedot

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op Assembly ja konekieli Tietokoneen ja ohjelmiston rakenne Loogisilla piireillä ja komponenteilla rakennetaan prosessori ja muistit Prosessorin rakenne

Lisätiedot

Salasanojen turvallinen tallentaminen KeePass ohjelmalla

Salasanojen turvallinen tallentaminen KeePass ohjelmalla Salasanojen turvallinen tallentaminen KeePass ohjelmalla KeePass on vapaasti saatavilla oleva, avoimen lähdekoodin ohjelma, jonka tarkoituksena on auttaa salasanojen hallinnassa. Tämä KeePass ohje on päivitetty

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 25.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 25.2.2009 1 / 34 Syötteessä useita lukuja samalla rivillä Seuraavassa esimerkissä käyttäjä antaa useita lukuja samalla

Lisätiedot

+ 3 2 5 } {{ } + 2 2 2 5 2. 2 kertaa jotain

+ 3 2 5 } {{ } + 2 2 2 5 2. 2 kertaa jotain Jaollisuustestejä (matematiikan mestariluokka, 7.11.2009, ohjattujen harjoitusten lopputuloslappu) Huom! Nämä eivät tietenkään ole ainoita jaollisuussääntöjä; ovatpahan vain hyödyllisiä ja ainakin osittain

Lisätiedot

MS-A0402 Diskreetin matematiikan perusteet

MS-A0402 Diskreetin matematiikan perusteet MS-A0402 Diskreetin matematiikan perusteet Osa 4: Modulaariaritmetiikka Riikka Kangaslampi 2017 Matematiikan ja systeemianalyysin laitos Aalto-yliopisto Modulaariaritmetiikka Jakoyhtälö Määritelmä 1 Luku

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 23.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 23.2.2009 1 / 44 Debuggeri Tyypillinen tilanne: ohjelma on kirjoitettu, Python-tulkki ei valita virheistä, mutta

Lisätiedot

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä Matti Luukkainen 10.12.2009 Tässä esitetty esimerkki on mukaelma ja lyhennelmä Robert Martinin kirjasta Agile and Iterative Development löytyvästä

Lisätiedot

Modernien salausalgoritmien aikajana

Modernien salausalgoritmien aikajana Osa2: Jono- ja lohkosalaus Modernien salausalgoritmien aikajana II ww 41-45 50 ekr 1550 1919 Block ciphers 1976 DES -----------------------> 2001 AES 1975 Caesarsalaus Vigeneren salaus One Time Pad Enigma

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 10.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 10.2.2010 1 / 43 Kertausta: listat Tyhjä uusi lista luodaan kirjoittamalla esimerkiksi lampotilat = [] (jolloin

Lisätiedot

Taulukot. Jukka Harju, Jukka Juslin 2006 1

Taulukot. Jukka Harju, Jukka Juslin 2006 1 Taulukot Jukka Harju, Jukka Juslin 2006 1 Taulukot Taulukot ovat olioita, jotka auttavat organisoimaan suuria määriä tietoa. Käsittelylistalla on: Taulukon tekeminen ja käyttö Rajojen tarkastus ja kapasiteetti

Lisätiedot

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A. Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta

Lisätiedot

Loppukäyttäjän ohje Asennus- ja käyttöohje - Windows

Loppukäyttäjän ohje Asennus- ja käyttöohje - Windows Loppukäyttäjän ohje Asennus- ja käyttöohje - Windows Fujitsun mpollux DigiSign Client on kortinlukijaohjelmisto, jonka avulla voit kirjautua luotettavasti ja turvallisesti organisaation tietoverkkoon tai

Lisätiedot

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset

815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset 815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 20.1.2010 T-106.1208 Ohjelmoinnin perusteet Y 20.1.2010 1 / 40 Arvon pyytäminen käyttäjältä Käyttäjän antaman arvon voi lukea raw_input-käskyllä. Käskyn sulkujen

Lisätiedot

F-Secure Mobile Security. Android

F-Secure Mobile Security. Android F-Secure Mobile Security Android F-Secure Mobile Security Sisällysluettelo 3 Sisällys Luku 1:Asennus...5 Asentaminen...6 Aktivointi...7 Luku 2:Luottamuksellisten tietojen suojaaminen...9 Anti-Theftin

Lisätiedot

Lyhyt oppimäärä mistä tietojen salauksessa on oikeasti kyse? Risto Hakala, Kyberturvallisuuskeskus, Viestintävirasto

Lyhyt oppimäärä mistä tietojen salauksessa on oikeasti kyse? Risto Hakala, Kyberturvallisuuskeskus, Viestintävirasto Lyhyt oppimäärä mistä tietojen salauksessa on oikeasti kyse? Risto Hakala, risto.hakala@ficora.fi Kyberturvallisuuskeskus, Viestintävirasto Sisältö Miten tietoa voidaan suojata? Mitä yksityiskohtia salausratkaisun

Lisätiedot

myynti-insinööri Miikka Lintusaari Instrumentointi Oy

myynti-insinööri Miikka Lintusaari Instrumentointi Oy TERVEYDENHUOLLON 25. ATK-PÄIVÄT Kuopio, Hotelli Scandic 31.5-1.6.1999 myynti-insinööri Miikka Lintusaari Instrumentointi Oy Uudet tietoturvaratkaisut SUOMEN KUNTALIITTO Sairaalapalvelut Uudet tietoturvaratkaisut

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 17.2.2010 T-106.1208 Ohjelmoinnin perusteet Y 17.2.2010 1 / 41 Sanakirja Monissa sovelluksissa on tallennettava rakenteeseen avain arvo-pareja. Myöhemmin rakenteesta

Lisätiedot

Kaikki oppaassa mainitut ohjelmat löytyvät VALO-CD:ltä: Mozilla Thunderbird, GPG ja Engimail.

Kaikki oppaassa mainitut ohjelmat löytyvät VALO-CD:ltä: Mozilla Thunderbird, GPG ja Engimail. GPG/PGP-opas GNU Privacy Guard (GPG tai GnuPG) on vapaa versio tiedostojen salaamiseen ja allekirjoittamiseen tarkoitetusta PGP-ohjelmasta. Siitä on saatavissa versiot Linuxin lisäksi myös Windowsille,

Lisätiedot

T-79.4501 Cryptography and Data Security

T-79.4501 Cryptography and Data Security T-79.4501 Cryptography and Data Security Lecture 11 Bluetooth Security Bluetooth turvallisuus Uhkakuvat Bluetooth turvallisuuden tavoitteet Linkkitason turvamekanismit Pairing menettely Autentikointi ja

Lisätiedot

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti: 1 (7) Tiedon lukeminen näppäimistöltä Scanner-luokan avulla Miten ohjelma saa käyttöönsä käyttäjän kirjoittamaa tekstiä? Järjestelmässä on olemassa ns. syöttöpuskuri näppäimistöä varten. Syöttöpuskuri

Lisätiedot

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisältö. 22. Taulukot. Yleistä. Yleistä Sisältö 22. Taulukot Yleistä. Esittely ja luominen. Alkioiden käsittely. Kaksiulotteinen taulukko. Taulukko metodin parametrina. Taulukko ja HelloWorld-ohjelma. Taulukko paluuarvona. 22.1 22.2 Yleistä

Lisätiedot

5. SALAUS. Salakirjoituksen historiaa

5. SALAUS. Salakirjoituksen historiaa 1 5. SALAUS Salakirjoituksen historiaa Egyptiläiset hautakirjoitukset n. 2000 EKr Mesopotamian nuolenpääkirjoitukset n. 1500 EKr Kryptografia syntyi Arabiassa 600-luvulla lbn ad-durahaim ja Qualqashandi,

Lisätiedot

VSP webmail palvelun ka yttö öhje

VSP webmail palvelun ka yttö öhje VSP webmail palvelun ka yttö öhje Kirjaudu webmailiin osoitteessa https://webmail.net.vsp.fi Webmailin kirjautumissivu, kirjoita sähköpostiosoitteesi ja salasanasi: Sähköpostin päänäkymä: 1: Kansiolistaus

Lisätiedot

Uuden Peda.netin käyttöönotto

Uuden Peda.netin käyttöönotto Sisällysluettelo Uuden Peda.netin käyttöönotto...2 Sisään- ja uloskirjautuminen...2 OmaTila...3 Peda.netin yleisrakenne...4 Työvälineet - Sivut...5 Sivun lisääminen omaan profiiliin:...5 Sivun poistaminen

Lisätiedot

Salausmenetelmät 2015/Harjoitustehtävät

Salausmenetelmät 2015/Harjoitustehtävät Salausmenetelmät 2015/Harjoitustehtävät 1. Ystäväsi K lähettää sinulle Caesarin yhteenlaskumenetelmällä kirjoitetun viestin ÖHXHHTTLOHUPSSHSSH R. Avaa viesti. 2. Avaa Caesarin yhteenlaskumenetelmällä laadittu

Lisätiedot

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen Pedacode Pikaopas Java-kehitysympäristön pystyttäminen Pikaoppaan sisältö Pikaoppaassa kuvataan, miten Windowstyöasemalle asennetaan Java-ohjelmoinnissa tarvittavat työkalut, minkälaisia konfigurointeja

Lisätiedot

Hgin kaupungin opetusvirasto Wilma opas huoltajille 1(10) HAKE/Tiepa 28.2.2007 KKa

Hgin kaupungin opetusvirasto Wilma opas huoltajille 1(10) HAKE/Tiepa 28.2.2007 KKa Hgin kaupungin opetusvirasto Wilma opas huoltajille 1(10) :LOPD 0LNl:LOPDRQ" Wilma on internetin kautta toimiva liittymä opettajille, oppilaille ja näiden huoltajille. Se ei ole käyttäjän koneella oleva

Lisätiedot

Käyttöohje. Energent MagiCAD plugin

Käyttöohje. Energent MagiCAD plugin Käyttöohje Energent MagiCAD plugin Sisältö 1. Yleistä 1 Dokumentin sisältö... 1 Ohjelman asennus... 1 Vaadittavat ohjelmistot... 1 Asennus... 1 Ohjelman käynnistys... 2 2. Toiminnallisuudet 3 Insert Energent

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 14.2.2011 T-106.1208 Ohjelmoinnin perusteet Y 14.2.2011 1 / 55 Kännykkäpalautetteen antajia kaivataan edelleen! Ilmoittaudu mukaan lähettämällä ilmainen tekstiviesti

Lisätiedot

Kryptovaluuttoista ja lohkoketjuista osa 3. Jyväskylä Henri Heinonen

Kryptovaluuttoista ja lohkoketjuista osa 3. Jyväskylä Henri Heinonen Kryptovaluuttoista ja lohkoketjuista osa 3 Jyväskylä 24.4.2018 Henri Heinonen (henri.t.heinonen@jyu.fi) Digitaalinen allekirjoittaminen Asymmetrisen avaimen kryptografiassa käytetään avainpareja, joiden

Lisätiedot

3. Muuttujat ja operaatiot 3.1

3. Muuttujat ja operaatiot 3.1 3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.

Lisätiedot

Kuljetus- ja sovelluskerroksen tietoturvaratkaisut. Transport Layer Security (TLS) TLS:n suojaama sähköposti

Kuljetus- ja sovelluskerroksen tietoturvaratkaisut. Transport Layer Security (TLS) TLS:n suojaama sähköposti Kuljetus- ja sovelluskerroksen tietoturvaratkaisut Transport Layer Security (TLS) ja Secure Shell (SSH) TLS Internet 1 2 Transport Layer Security (TLS) Sopii monenlaisille sovellusprotokollille, esim HTTP

Lisätiedot

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016)

Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Harjoitus 3: Flash-komponenttiarkkitehtuuri (18.3.2016) Tietokoneavusteinen opetus -kurssilla opetetaan Adobe Flash CS6:n käyttämistä neljänä kertana: 11.3.2016, 15.3.2016, 18.3.2016 ja 1.4.2016. Harjoituskerroilla

Lisätiedot

Harjoitustehtävät. Laskarit: Ti KO148 Ke KO148. Tehtävät viikko. VIIKON 42 laskarit to ko salissa IT138

Harjoitustehtävät. Laskarit: Ti KO148 Ke KO148. Tehtävät viikko. VIIKON 42 laskarit to ko salissa IT138 Harjoitustehtävät Laskarit: Ti 12 14 KO148 Ke 12 14 KO148 Tehtävät viikko 37 : 3, 4, 5, 9a, 10, 11 38 : 18a, b, 20, 21, 23a, b, 26, 28b 39 : 17, 29, 31, 32, 33, 35 40 : 8, 16, 34, 37, 38a, b 41 : 40, 42,

Lisätiedot

17. Javan omat luokat 17.1

17. Javan omat luokat 17.1 17. Javan omat luokat 17.1 Sisällys Application Programming Interface (API). Pakkaukset. Merkkijonoluokka String. Math-luokka. Kääreluokat. 17.2 Java API Java-kielen Application Programming Interface (API)

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.2.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.2.2009 1 / 43 Funktiot Tähän asti esitetyt ohjelmat ovat oleet hyvin lyhyitä. Todellisessa elämässä tarvitaan kuitenkin

Lisätiedot

Luku II: Kryptografian perusteita

Luku II: Kryptografian perusteita Luku II: Kryptografian perusteita Tässä toisessa luvussa esitellään muutamia peruskäsitteita ja -tekniikoita symmetrisestä salauksesta, julkisen avaimen salauksesta eli epäsymmetrisestä salauksesta, kryptografisista

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 26.1.2009 T-106.1208 Ohjelmoinnin perusteet Y 26.1.2009 1 / 33 Valintakäsky if syote = raw_input("kerro tenttipisteesi.\n") pisteet = int(syote) if pisteet >=

Lisätiedot

Harjoitus 1 -- Ratkaisut

Harjoitus 1 -- Ratkaisut Kun teet harjoitustyöselostuksia Mathematicalla, voit luoda selkkariin otsikon (ja mahdollisia alaotsikoita...) määräämällä soluille erilaisia tyylejä. Uuden solun tyyli määrätään painamalla ALT ja jokin

Lisätiedot

Lyhyt oppimäärä mistä salauksessa on kyse? Risto Hakala, Kyberturvallisuuskeskus, Viestintävirasto

Lyhyt oppimäärä mistä salauksessa on kyse? Risto Hakala, Kyberturvallisuuskeskus, Viestintävirasto Lyhyt oppimäärä mistä salauksessa on kyse? Risto Hakala, risto.hakala@viestintavirasto.fi Kyberturvallisuuskeskus, Viestintävirasto Sisältö Tiedon suojauksessa käytetyt menetelmät Salausratkaisun arviointi

Lisätiedot

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva - neliö, jonka

Lisätiedot

Osa1: Peruskäsitteitä, klassiset salakirjoitukset. Salausmenetelmät. Jouko Teeriaho LapinAMK

Osa1: Peruskäsitteitä, klassiset salakirjoitukset. Salausmenetelmät. Jouko Teeriaho LapinAMK Osa1: Peruskäsitteitä, klassiset salakirjoitukset Salausmenetelmät Jouko Teeriaho LapinAMK SALAUSMENELMÄT OSANA TEKNISTÄ TIETOTURVAA Tietoturvallisuus Yleinen tietoturva Tekninen tietoturva Palomuurit,

Lisätiedot

ASCII-taidetta. Intro: Python

ASCII-taidetta. Intro: Python Python 1 ASCII-taidetta All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/18cplpy to find out what to do.

Lisätiedot

1 Tehtävän kuvaus ja analysointi

1 Tehtävän kuvaus ja analysointi Olio-ohjelmoinnin harjoitustyön dokumentti Jyri Lehtonen (72039) Taneli Tuovinen (67160) 1 Tehtävän kuvaus ja analysointi 1.1 Tehtävänanto Tee luokka, jolla mallinnetaan sarjaan kytkettyjä kondensaattoreita.

Lisätiedot

6. Langattoman modeemin asennus

6. Langattoman modeemin asennus 6.1 Langattoman modeemin asetukset Cisco EPC3825 Huom! Langattoman verkon käyttöön liittyviä asetuksia voi muuttaa vain sellaiselta tietokoneelta, joka on liitetty laitteeseen verkkokaapelilla. Nyt olet

Lisätiedot

INTINU13A6 Java sovellukset

INTINU13A6 Java sovellukset Johdanto Kurssin tavoitteena oli luoda tietokantaa käyttävä websovellus Java EE ohjelmointikielellä, sekä hyödyntää muun muassa servlettejä sekä JSP sivuja ja muita tekniikoita monipuolisesti. Webserverinä

Lisätiedot

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle

Lisätiedot