.. copyright 2007 by Giacomo A. Catenazzi (cate@cateee.net)
   It is available under the terms of the Creative Commons
      Attribution-NonCommercial-ShareAlike Licence 2.5

.. include:: <s5defs.txt>

==========================================================================
Firme digitali e crittografia in Linux con GnuPG
==========================================================================
--------------------------------------------------------------------------
Introduzione e usi pratici
--------------------------------------------------------------------------

.. |event| replace:: TiLUG day primavera 2007
.. |talkdate| replace:: 9 giugno 2007
.. |author| replace:: Giacomo Catenazzi
.. |authoremail| replace:: cate@cateee.net
.. |footer| replace:: |event| |talkdate|

.. container:: author

  |author| <|authoremail|>

.. _Tilug: http://tilug.ch
.. _Debian: http://debian.org/

.. container:: event

  |event|
  |talkdate|


Introduzione
============

.. class:: incremental

  - Concetti fondamentali:

    - crittografia
    - hashing a senso unico
    - firme digitali

  - In pratica:

    - gnupg (gpg)
    - enigmail (trhunderbird/icedove)

  - Non si parla (in questa presentazione) sugli

    - matematica, algoritmi, protocolli
    - altri usi, SSL, sicurezza, ...

  *La crittografia non aumenta la sicurezza!*


GnuPG (gpg)
===========

* progetto della GNU, sviluppato principalmente in Germania (Werner Koch)

* command line (gpg), ed usato come backend per le varie GUI

* Sostituisce PGP (Pretty Good Privacy di Philip Zimmermann)

* http://www.gnupg.org

* ``gpg --version --cipher-algo`` algoritmi supportati::

     Supported algorithms:
     Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
     Cipher: 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH
     Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
     Compression: Uncompressed, ZIP, ZLIB, BZIP2


Crittografia a chiave simmetrica
================================

* Chiave comune

  - molto sicuro, chiavi a 128bit
  - 3DES, blowfish, IDEA, ...
  - molto veloce, richiede poche risorse

* Difetti:

  - come scambio le chiavi?
  - non permette firme digitali


Chiave simmetrica con gpg
=========================

* Codificare (comprime il file) doc.txt in doc.txt.gpg:

  - ``gpg --symmetric doc.txt``

* Decodificare doc.txt.gpg in doc.txt:

  - ``gpg --decrypt doc.txt.gpg``

* Opzioni principali di gpg (valido in tutti i modi)

  - ``--output`` *file* scrive sul *file*
  - ``--armor`` scrive in ascii (adatto per le email)


Crittografia a chiave pubblica
==============================

Chiave publica per criptare, chiave privata per decodificare.

- Scambio di chiavi semplificato:
  
  - una chiave per persona
  - chiave pubblica, quindi si puo' pubblicare sull'homepage

- Lento
- richiede chiavi piu' grandi (almeno 1024 bit)
- RSA, ElGamal, DSA
- Sicurezza non garantita in caso di nuove scoperte matematiche


Crittografia: sistemi ibridi
============================

1) Generazione di una chiave simmetrica (*session key*)
2) criptare il documento con la chiave simmetrica
3) criptare la chiave simmetrica con la chiave publica
4) distribuire il documento e la chiave criptata

- Forma piu' comune, veloce, puo' avere piu' mittenti
- Richiede un buon generatore di numeri casuali!


Crittografia a chiave pubblica con gpg
======================================

In realta' e' un sistema ibrido

Codificare: ``gpg --encrypt  --recipient alice@tilig.ch doc.txt``
  - anche con piu' ``--recipient``
  - supporta ``--output``, ``--armor``
  - comprime il file (tranne con ``--armor``

Decodificare: ``gpg --decypt doc.txt.gpg``

* Piu' tardi vediamo come generare e come gestire le chiavi


Hashing a senso unico
=====================

MD5, SHA1, SHA256

Un *codice di integrita'*:
  - riassume un documento in pochi bit (da 128bit)
  - **praticamente** impossibile trovare due documenti identici
  - **praticamente** impossibile modificare un documento mantenendo la stessa hash


Firma digitale
==============

Combina l'hasing a senso unico con la crittografia publica, ma funziona solo con alcuni algoritmi

Si certifica ogni singolo byte (e nella giusta posizione), spazi bianchi compresi

OpenPGP (RFC-2440) definisce lo standard di interoperabilita'

Serve la chiave del mittente


Firma digitale con gpg
======================

firma: ``gpg --sign doc.txt``  (comprime e file binario)

verifica: ``gpg --verify doc.txt``

Verificare ed estrarre: ``gpg --decrypt doc.txt``

Firma chiara (non modifica il testo, usato nelle email): ``--clearsign``

Firma staccata ``--detach`` (e ``--verify`` per controllare), usata per verificare gli archivi


Gestione delle firme
====================

creare una nuova chiave: ``gpg --gen-key``

Revokation certificate:

exportare una chiave:
  - file: ``gpg --armor --export chiave``
  - key server: ``gpg --send-key chiave``

importare una chiave
  - file: ``--import``
  - key server: ``recv-key``

Fingerprint


rete di fiducia (Web of trust)
==============================

blabla








include:: licence.en.rst
.. include:: common.inc
.. footer:: |footer|
