Seminario crittografia-linux-day-2004

Click here to load reader

  • date post

    13-Jun-2015
  • Category

    Documents

  • view

    422
  • download

    0

Embed Size (px)

description

Introduzione alla crittografia con Linux. Vecchie slides fatte nel 2004

Transcript of Seminario crittografia-linux-day-2004

  • 1. 26/11/04 - Linux Day BergamoLa crittografia al servizio d i Linux, conservare inm aniera sicura i p rop ri d ati. Flavio Castelli aka m icron Disclaim erTutto il materiale contenuto in questa presentazione ha fini esclusivamenteinformativi ed educativi.Lautore non si ritiene in alcun modo responsabile per danni perpetrati acose o persone causati dalluso di codice, programmi, informazioni, tecnichecontenuti allinterno della stessa.

2. 26/11/04 - Linux Day Bergamo Introd uzione: cosa la crittografia? DefinizioneLa crittografia larte di progettare algoritmi (o cifrari) per crittografareun messaggio rendendolo incomprensibile a tutti tranne al suodestinatario.Solo chi in possesso di una determinata chiave in grado di leggere iltesto in chiaro. 3. 26/11/04 - Linux Day BergamoIntrod uzione: cosa la crittografia? Un m ito d a sfatare*La robustezza di un sistema di crittografia risiede solo ed esclusivamentenella segretezza della chiave e non dellalgoritmo. opportuno rendere pubblico lalgoritmo, in modo che se ne possanoscoprire eventuali punti deboli in anticipo.La sicurezza del sistema dipende esclusivamente dalla segretezza dellachiave.* principio enunciato nel 1883 da Auguste Kerckhoffs 4. 26/11/04 - Linux Day BergamoIntrod uzione: cosa la crittografia? Cenni storici (1)Antico egitto: primo uso della crittografia, uso di geroglifici nonstandard.Il cifrario di Cesare: nelle comunicazioni militari ogni letteradellalfabeto era sostituita con quella presente alla posizione p+x, dove p la posizione alfabetica del carattere originale. Esempio:Testo in chiaro: BG LUGAlgoritmo: A=pB+k (con k=3)Testo cifrato: EL OAL Legenda: A=nuovo carattere (after) pB=posizione carattere non codificato (before) k= chiave (key) 5. 26/11/04 - Linux Day BergamoIntrod uzione: cosa la crittografia? Cenni storici (2)Nel 1466 Leon Battista Alberti pubblica il De cifris.Sono illustrati i principali metodi di cifratura noti allepoca, introdotto unnuovo metodo, creato dallautore, che prevede la modifica periodica dellachiave.Esempio: Testo in chiaro: BG LUG Algoritmo: A=pB+k (k=3 per la prima parola, k=4 per la seconda parola) Testo cifrato: EM QDP Legenda: A=nuovo carattere (after) pB=posizione carattere non codificato (before) k= chiave (key) 6. 26/11/04 - Linux Day Bergamo Introd uzione: cosa la crittografia?Cenni storici (3)Un secolo pi tardi Blaise de Vigenre, partendo dallidea di Alberti edalle sue successive elaborazioni, cre un sistema di codificaparticolarmente efficace, noto con il nome di: cifrario indecifrabile.Si usa una tabella contenente tutti gli alfabeti di cifratura (a 26 lettere) disponibili.A B C D E F G H I J K L M N O P Q R S T U V W X Y ZB C D E F G H I J K L M N O P Q R S T U V W X Y Z A ..Y Z A B C D E F G H I JK LM N O P Q R S T U V W XZ A B C D E F G H I J K. L MN O P Q R S T U V W X Y Funzionamento: Si sceglie una parola chiave. Si identificano le le righe della tabella che iniziano con le lettere della parola chiave, ottenendo cos degli alfabeti. Si cicla tra questi alfabeti cifrando il testo.NB: la stessa lettera pu essere cifrata in maniera diversa 7. 26/11/04 - Linux Day BergamoIntrod uzione: cosa la crittografia? Cenni storici (4)Negli anni successivi furono introdotti dispositivi di cifratura meccanicied elettromeccanici quali enigma, un dispositivo usato dallesercitotedesco durante la seconda guerra mondiale.Con lintroduzione dellinformatica inizi la sviluppo di algoritmiindicati per essere eseguiti dal computer.--> finalmente possibile avere delle chiavi di dimensioni notevoli,rendendo improponibile un attacco manuale. 8. 26/11/04 - Linux Day BergamoTip i d i crittografiaChiave sim m etrica Per cifrare e decifrare i dati usata ununica chiavechiaveTesto in chiaro Testo in chiaro cifratura decifratura Testo cifrato Svantaggio principale: nel caso in cui si debba distribuire del materiale confidenziale siamo costretti a diffondere la chiave. Come detto in precedenza la sicurezza di un sistema crittografico dipendeesclusivamente dalla segretezza della chiave --> maggiore ilnumero delle copie della chiave, maggiori sono le probabilit che idati siano compromessi 9. 26/11/04 - Linux Day Bergamo Tip i d i crittografiaChiave a sim m etrica - d efinizione (*) Per cifrare e decifrare i dati sono usate due chiavi: Chiave pubblica: cifratura dati Chiave privata: decifratura dati ChiaveLegateChiave privata pubblicamatematicamente destinatariodestinatarioTesto in chiaro Testo in chiaro cifraturadecifraturaTesto cifrato Le due chiavi sono ricavate tramite un procedimento matematico, sono collegate tra di loro. impossibile ricavare una chiave partendo dallaltra. La chiave privata non deve essere diffusa. La chiave pubblica liberamente distribuibile. * tecnica ideata nel 1975 da Whitfield Diffie e Martin Hellman 10. 26/11/04 - Linux Day Bergamo Crittografia in Linux Cosa vogliam o fare?Prima di tutto dobbiamo chiederci quali sono le nostre esigenze.Possibili scenari duso:Inviare mail sicureConservare in maniera sicura alcuni dati.Conservare in maniera sicura tutti i dati presenti su un device.Proteggere tutti i dati presenti nel sistema. 11. 26/11/04 - Linux Day Bergamo Invio m ail sicure Op erazioni possibiliPossiamo compiere le seguenti azioni: Cifrare la mail: usiamo la chiave pubblica del destinatario, soltanto lui (usando la sua chiave privata) sar in grado di leggerla Firmare la mail: usiamo la nostra chiave privata per firmare il messaggio, il destinatario (usando la nostra chiave pubblica) sar in grado di stabilire lautenticit del mittente. Cifrare e firmare la mail: firmiamo la mail usando la nostra chiave privata, mentre usiamo quella pubblica del destinatario per cifrare il messaggio. Si combinano gli aspetti elencati sopra. 12. 26/11/04 - Linux Day Bergamo Invio m ail sicure Strum enti a d isp osizionePer inviare mail crittografate o firmate servono i seguenti programmi: GPG (GNU Privacy Guard): lo strumento alla base di tutto, gestisce le chiavi, la cifratura e la decifratura. Client di posta: molti hanno supporto diretto a gpg (mutt, pine, kmail, sylpheed, evolution) Fronted GPG: evitano di dovere impare la sintassi di gpg, ne facilitano luso. Per Kde presente kgpg, per gli amanti delle gtk esiste GPA. 13. 26/11/04 - Linux Day BergamoInvio m ail sicure Uso d i GPG Creazione d i una cop p ia d i chiavi (1)Creiamo una nuova coppia di chiavi per GPG:[email protected]$gpggenkeygpg(GnuPG)1.2.4;Copyright(C)2003FreeSoftwareFoundation, Inc.ThisprogramcomeswithABSOLUTELYNOWARRANTY.Thisisfreesoftware,andyouarewelcometoredistributeitundercertainconditions.SeethefileCOPYINGfordetails.Scelta dellalgoritmo:Pleaseselectwhatkindofkeyyouwant:(1)DSAandElGamal(default)(2)DSA(signonly)(4)RSA(signonly)Yourselection?1Dimensioni delle chiavi:DSAkeypairwillhave1024bits.AbouttogenerateanewELGEkeypair.minimumkeysizeis768bitsdefaultkeysizeis1024bitshighestsuggestedkeysizeis2048bitsWhatkeysizedoyouwant?(1024)1024Requestedkeysizeis1024bits 14. 26/11/04 - Linux Day Bergamo Invio m ail sicureUso d i GPG Creazione d i una cop p ia d i chiavi (2)Periodo di validit:Pleasespecifyhowlongthekeyshouldbevalid.0=keydoesnotexpire=keyexpiresinndaysw=keyexpiresinnweeksm=keyexpiresinnmonthsy=keyexpiresinnyearsKeyisvalidfor?(0)0KeydoesnotexpireatallIsthiscorrect(y/n)?yIdentificativo:YouneedaUserIDtoidentifyyourkey;thesoftwareconstructstheuseridfromRealName,CommentandEmailAddressinthisform:"HeinrichHeine(DerDichter)" Realname:FlavioCastelli Emailaddress:[email protected] Comment:Ilmioindirizzodipostaprincipale YouselectedthisUSERID: "FlavioCastelli(Ilmioindirizzodipostaprincipale)"Conferma:Change(N)ame,(C)omment,(E)mailor(O)kay/(Q)uit?OYouneedaPassphrasetoprotectyoursecretkey. 15. 26/11/04 - Linux Day Bergamo Invio m ail sicure Uso d i GPG Com and i baseElenco chiavi:gpglistkeysImportare una chiave pubblica:gpgimport[nomefile]Esportare una chiave in formato ascii:Per indicare un UID relativo a unagpgaexport[UID] chiave si pu usare lindirizzo diRevocare una chiave:posta del suo proprietario, oppuregpggenrevokeloutput fornito dal comando --list-keysGestire una chiave:gpgeditkeyUID Consente di eseguire una serie di operazioni quali: firma della chiave, aggiunta di un indirizzo di posta secondario, cambio password, ... 16. 26/11/04 - Linux Day BergamoInvio m ail sicureUso d i GPG Cifrare e d ecifrare Cifrare un file: gpgerdestinatario[file]Otterremo cos un file chiamato file.gpg contenente il messaggio crittografato. Decifrare un file: gpgd[file]Il messaggio decifrato sar stampato sullo stdout, per ovviare usare lopzione-o seguita dal nome del file di destinazione (oppure si pu ridirezionareloutput a mano). 17. 26/11/04 - Linux Day Bergamo Invio m ail sicure Uso d i GPG Firm are un fileFirmare un file:gpgs[armor][file] Otterremo cos un file chiamato file.gpg contenente il messaggio firmato e compresso.Per non comprimere il file, lasciandolo leggibile, si deve usare il comando:gpgclearsign[file]Per firmare un file binario o un archivio meglio lasciare la firma in unfile separato, per farlo usiamo il comando:gpgb[armor][file] Otterremo cos un file chiamato file.sig contenente la firma del file.Per cifrare e allo stesso tempo firmare un file si pu usare questo comando:gpg[umittente][rdestinatario][armor]signencrypt[dati] Utile per creare un armored ascii 18. 26/11/04 - Linux Day BergamoInvio m ail sicure Uso d i GPG Verificare la firm a d i un filePer verificare la firma di un file: gpgverify[signedfile] Ad esempio:[email protected]$gpgverifyfile.gpggpg:SignaturemadeMonJun700:16:052004CESTusingDSAkeyID 6D632BEDgpg:Goodsignaturefrom"micron"Nel caso in cui si disponga di un file di tipo .sig oppure .asc si deveusare la seguente sintassi: gpgverify[sig/ascfile][file] Ad esempio: [email protected]$gpgverifycmd.asccmd gpg:SignaturemadeMonJun700:18:462004CESTusingDSAkeyID6D632BED gpg:Goodsignaturefrom"micron" 19. 26/11/04 - Linux Day Bergamo Conservare alcuni d ati Soluzioni p ossibiliPossiamo agire in due modi: Usiamo un archvio cifrato con gpgPro: Semplice realizzazione Non richiede modifiche kernelContro: Scomodo Poco versatile Usiamo un container/device crittografato Soluzione ottimale 20. 26/11/04 - Linux Day BergamoContainer/d evice crittografato Cosa un container crittografa to?Un container non altro che un file (o un intero device) contenenteun file system crittografato. Pro: Comodo per conservare pi file I vantaggi di avere un file system: permessi sui file, ... visto come una partizione Contro: Usa una cifratura a chiave simmetrica --> tutti gli svantaggi che ne derivano Richiede la presenza di alcuni componenti allinterno del kernel Si deve essere root del sistema (salvo configurazioni mirate) 21. 26/11/04 - Linux Day BergamoContainer/d evice crittografatoSoluzioni d isp onibiliNellambiente GNU/Linux sono disponibili varie soluzioni:BestcryptCryptoloopLoop AESDevice mapper crypto 22. 26/11/04 - Linux Day Bergamo Container/d evice crittografatoBestcryp t - caratteristicheSoluzione non open source realizzata dalla Jetico, smette di funzionaredopo 30 giorni (?) Pro:Usato in ambienti con alti requisiti di sicurezzaSupporta cifratura devicesSupporta molti algoritmi di cifraturaCrea container leggibili anche da windows (se in fat/fat32)Innovativa feature: hidden container Contro:Non open sourceNon compatibile con tutte le piattaforme (solo x86)Problemi con la serie 2.6 del kernel (fino alla release 1.5-5)Non supporta tutti i file system linux (supporta solo ext2, ext3,reiserfs, minix) 23. 26/11/04 - Linux Day BergamoContainer/d evice crittografato Bestcryp t - avvioPer prima cosa dobbiamo avviare bestcrypt: geminiinit.d#./bcryptstart Sono caricati i seguenti moduli: geminiinit.d#lsmod ModuleSizeUsedby bc_cast182760 bc_rijn334440 bc_idea86760 bc_3des164840 bc_bf128136040 bc_bf448137320 bc_twofish187520 bc_gost68840 bc_des158440 bc_blowfish136040 bc1636010 Sono creati i seguenti devices: /dev/bcrypt0 ... /dev/bcrypt15 24. 26/11/04 - Linux Day BergamoContainer/d evice crittografato Bestcryp t op erazioni base1) Creare un nuovo container:bctoolnews[size]a[algoritmo][ddescrizione][file/rawdevice]2) Creare il file system del container:bctoolformatt[filesystem][file]3) Montare il container:bctoolmountt[filesystem][file][mountpoint]4) Smontare il container:bctoolumount[mountpoint] 25. 26/11/04 - Linux Day Bergamo Container/d evice crittografato Bestcryp t hid d en container (1)Applicando la steganografia a un container esistente si ottiene un hiddencontainer.Caratteristiche: impossibile individuare la presenza di un hidden container.Usa una password (e volendo pure un file-system) diversa daquello del container ufficiale ancora possibile accedere al container originale, dipende dallapassword immessa al momento del mount. Attenzione: ogni modifica fatta al primo container causer la perdita definitiva di quello nascosto (utile per cancellare in maniera irreversibile dei dati in casi demergenza). 26. 26/11/04 - Linux Day Bergamo Container/d evice crittografatoBestcryp t hid d en container (2)Si consiglia di creare un hidden container allinterno di un container cheabbia gi alcuni dati (in modo da rendere ancora pi difficile la suaindividuazione).Creare un hidden container: bctoolmake_hidden[filename][size]Formattare lhidden container* : bctoolformatt[filesystem][file]Montare lhidden container* : bctoolmountt[filesystem][file][mountpoint] * usare la password digitata al momento della creazione dellhidden container 27. 26/11/04 - Linux Day BergamoContainer/d evice crittografatoCryp toloopPro: Open source Supporto nativo allinterno del kernel (no patch con ramo 2.6) Supporta cifratura devices Supporta molti algoritmi di cifratura Multi piattaforma Supporta tutti i file system disponibili per Linux Contro:Non supporta hidden containerNon compatibile con windowsVulnerabile ad attacchi ottimizzati con dizionario (scoperta recente)Il mount in loopback soffre di alcune limitazioni e bachi 28. 26/11/04 - Linux Day BergamoContainer/d evice crittografatoCryp to loop Requisiti kernelPer poter usare crypto loop di devono attivare le seguenti opzioni:DeviceDrivers|__Blockdevices|__Loopbackdevicesupport(BLK_DEV_LOOP)|__ CryptoloopSupport(BLK_DEV_CRYPTOLOOP)Per quanto riguarda gli algoritmi scegliere tra quelli disponibili alla voce:CryptographicoptionsCompilare il tutto staticamente o modularmente.NB: Per determinati scopi richiesta la presenza statica e non modulare. 29. 26/11/04 - Linux Day BergamoContainer/d evice crittografatoCryp to loop Program m i in user sp ace Per poter usare crypto loop si devono compilare le util-linux. Devono essere aggiunte le patch per losetup e per il kernel della serie 2.6$wgethttp://www.kernel.org/pub/linux/utils/utillinux/utillinuxX.Y.tar.gz$tarxvzfutillinuxX.Y.tar.gz$cdutillinuxX.Y$patchp1 conservarne alcune copie al sicuro 2) Lintera sicurezza del sistema dipende dalla password presente sulkeychain --> (scegliere pwd adeguata, cambiarla regolarmente,...) 45. 26/11/04 - Linux Day Bergamo Intero sistem a crittografato Partizione d i boot - requisitiAllavvio il boot loader carica il kernel e avvia la procedura di init.Il nostro sistema dovr soddisfare questi requisiti: Il kernel si dovr trovare in una partizione non cifrata Per montare la root dovremo disporre di alcuni programmiDovremo creare:Normale procedura, Una partizione di boot non cifrata usare fdisk o simili. Un boot diskFormattare in ext2 46. 26/11/04 - Linux Day Bergamo Intero sistem a crittografato Boot d isk creazione (1)Creiamo il file che conterr il boot disk:ddif=/dev/zerobs=1Mcount=5of=/boot/initrdFormattiamo il boot disk:mke2fsFm0b1024boot/initrdMontiamo il boot disk:mount/boot/initrdtext2oloop=/dev/loop1/mnt/initrdCreaimo la struttura del sistema:cd/mnt/initrdmkdirp{bin,dev,lib,mnt/{keychain,newroot},proc,usr/{sbin,lib},sbin} 47. 26/11/04 - Linux Day Bergamo Intero sistem a crittografatoBoot d isk - creazione (2)Questi saranno programmi che ci serviranno:mount killallumount pivot_rootbash cryptsetupchroot devfsdPer trovare il percorso di un programma:whichprogramEsempio:melindoinitrd#whichcryptsetup/usr/bin/cryptsetupmelindoinitrd#cp/usr/bin/cryptsetup/mnt/initrd/usr/bin 48. 26/11/04 - Linux Day BergamoIntero sistem a crittografatoBoot d isk - creazione (3)Dovremo copiare anche le librerie a cui i vari programmi sono linkati.Per trovare le librerie relative a un programma:ldd`whichprogram`Esempio:melindoinitrd#ldd`whichcryptsetup`libgcrypt.so.7=>/usr/lib/libgcrypt.so.7(0x0ff93000)libnsl.so.1=>/lib/libnsl.so.1(0x0ff5d000)libgpgerror.so.0=>/usr/lib/libgpgerror.so.0(0x0ff39000)libdevmapper.so.1.00=>/lib/libdevmapper.so.1.00(0x0ff13000)libpopt.so.0=>/usr/lib/libpopt.so.0(0x0feea000)libc.so.6=>/lib/libc.so.6(0x0fd9e000)/lib/ld.so.1=>/lib/ld.so.1(0x30000000)Allinterno di /etc ci saranno i seguenti files:devfs.d ( una dir)devfsd.conf 49. 26/11/04 - Linux Day BergamoIntero sistem a crittografatoBoot d isk init (1) Dopo essersi caricato il kernel passa il controllo allinit. Questo sar il nostro script di init:#!/bin/bashcounter=0/bin/mountproctproc/proc/sbin/devfsd/dev2>/dev/nullecho"waitingusbkeychain..."while![e/dev/sda2];doletcounter+=1done#Askforapassphrasetoopenthekeys(thispreventsexposureofthekeysin#casetheownerlosesthekeychain).Givetheuserthreetriestogetthe#passphraseright.for((FAILED=1,TRY=1;($FAILED!=0)&&(TRY