Cours de Florent.

# Calculer en théorie et en pratique I/III

Dans la prochaine séquence de cours, nous allons tenter de répondre à la question suivante.

C'est quoi un ordinateur?

Cette question s'apparente à celle que ce sont posés philosophes et mathématiciens de Leibnitz à Turing en passant par Hilbert.

Qu'est-ce qu'une question à laquelle on peut répondre de manière mécanique par un calcul?

Nous allons explorer rapidement ce sujet en évoquant à la fois des modèles théoriques et des explication sur l'architecture matérielle et le fonctionnement d'ordinateurs modernes.

## Calcul Matériel.

Initialement, les "computer" sont des humains, qui s'aident de divers mécanisme pour faire des calculs rapidement en essayant de faire le moins d'erreurs possibles, par exemple avec un boulier ou des cordes nouées. 

Les premières machines à calculer sont mécaniques et peuvent être discrètes (nombre fini de position avec par exemple des roues crantées) ou continues (position continue sur un astrolabe ou une table à tracer pour calculer des intégrales). 

Les machines modernes possèdent différents composants electroniques et ce sont les transistors qui permettent de passer d'une information analogique/continue 

> quelle est la puissance du courant?

à une information discrète, oui ou non, qu'on peut interpréter comme 0 ou 1.

> est-ce-que le courant dépasse un certain seuil?

On peut à l'aide de quelques composants de base faire des calculs sur ces valeurs 0 ou 1. On parle alors de calcul Booléen (du nom du logicien Boole).

### circuit booléen
consiste en
1. des entrées contenant des valeurs booléennes.
1. des portes logiques permettant de calculer
   * le ET binaire (&) 
   * le OU binaire (v)
   * la négation NON unaire (-)
1. des "cables" pour relier ces portes
1. des sorties correspondant à la sortie du calcul.

Au tableau
* table du ET
* table du OU
* table du NON

### exercices 

1. Écrire la table de Non de x ou y.
1. Décrire un circuit permettant de tester si deux entrée x et y sont égales.
Le circuit doit renvoyer 1 si c'est le cas et 0 sinon.
NB. on peut noter cette opération <-> ou 
2. Même question pour le circuit qui permet de calculer le XOR (Ou eXclusif).
3. Même question pour le circuit permettant de calculer la majorité de trois arguments

### Digression : le schéma de chiffrement de Vernam
Il s'agit d'un schéma très simple et incassable à moins de connaître la clé secrète.
L'inconvénient est qu'il faut fabriquer et partager avec son destinataire une clé secrète aussi longue que le message. On parle aussi de "one time pad" en anglais.

Pendant la seconde guerre mondiale, à Bletchley Park, des opératrices fabriquaient de telles clés mais en quantité trop réduite. Une tentative de mécanisation pour pallier à ce soucis a permis de générer des clés rapidement mais qui avaient une différence avec les véritables clés.


> 

    "Enoch, why are you . . . here?"

    "Oh. I am here, in a larger sense, because Mrs. Tenney, the vicar’s wife, has become sloppy, and forgotten to close her eyes when she takes the balls out of the bingo machine."

Neal Stephenson. Cryptonomicon.

[Discussion sur stackexchange](https://crypto.stackexchange.com/questions/25214/has-human-generated-entropy-ever-been-a-real-problem)


Nous allons mettre en oeuvre ce chiffrement.
1. Tout d'abord le message à chiffrer M, qu'on suppose encodable en ASCII est transformé en un séquence de 0 et de 1 qu'on note B.
1. La clé secrète S est une série de 0 et de 1 de même longueur.
1. On additionne "modulo 2" B à S pour obtenir le message chiffré C (c'est le XOR de tout à l'heure).
1. On transmet le message chiffré C au destinataire.
1. La destinataire reçoit C.
1. Pour décoder, elle procède de même mais à l'envers.
   * ajout de S à C
   * découpage en bloc de 7 bits
   * décodage ASCII
   
[page du code ASCII](https://fr.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange)
   
NB. pour faire plus proche de la réalité, on préfixe le code ASCII d'un 0 pour obtenir un octet.

### exercice
Nous allons mettre en oeuvre ce chiffrement pour le mot BINGO.
Fabriquez au préalable une clé de la taille adapté
(vous pouvez par exemple tirer à pile ou face successivement). 

Pour simplifier, vous pouvez le faire avec OK.

Réfléchissez à une mise en oeuvre pratique sur papier.

## Retour à nos circuits.

Nous allons maintenant mettre en oeuvre des circuits pour faire des opérations arithmétiques.


1. Même question pour un circuit qui réalise une somme "modulo 2"
   NB. c'est le chiffrement de Vernam.
1. Même question pour un circuit qui réalise une somme en binaire.
   Pour ce second circuit on s'autorise une porte de duplication notée D qui prend en entrée x et a deux sorties valant toutes deux x.

### Indication.
Pour rappel en binaire 1+1 vaut 10; 1+0 comme 0+1 valent 1; et, 0+0 vaut 0.

**Exemple**
```
0110
0111
====
...1
..01 retenue 1
.101 retenue 1
1101 Fin
```
### Indication 2
2 questions rhétoriques :

  * Comment faire la retenue?
  * Comment calcule la somme dans la même colonne?



