es una quintupla C= (M,C,K,E,D), donde
- M: conjunto de todos los posibles mensajes a cifrar (texto claro/texto claro)
- C: conjunto de todos los criptogramas, es decir, los mensajes cifrados.
- K: llaves que se pueden usar en este criptosistema.
- E:conjunto de las transformaciones de cifrado que se aplican sobre M y dan como resultado C.
- D:conjunto de las transformaciones de descifrado que se aplican sobre C y dan como resultado M.
- SIMÉTRICOS(de llave privada)
Se llama de llave simétrica porque es la misma llave que se usa para cifrar que para descifrar.- ASIMÉTRICOS(de llave pública)
En este caso tenemos dos llavesPara cifrar usaremos una llave y la otra llave para descifrar.
- k: llave privada
- p: llave pública
RSA: es el método más común y es el que usaremos nosotros.
Propiedades:
p: pública, la puede conocer cualquiera.
(p, k): dado una p hay una k y viceversa, y solo una.
CRR
- Congruencia modulo n a y b son congruentes a
b (mod n) cuando:
- Algoritmo de Euclides: (básico) Permite calcular el máximo común divisor de dos números
Conjunto reducido de restos. En la aritmética módulo n, todos los mínimos que utilizamos son menores que n.
CRR es el conjunto de mínimos que son primos relativos con n.
Llamamos, al número de elementos del conjunto reducido de restos.
También conocemoscomo aquellos números que su mod=1.
Representa cualquier número en forma binaria.b = 20b0 + 21b1 + ... + 2nbn
lo que queremos calcular escomo solo puede tomar valores en 0 o 1, si es 0 ese factor valdría 1, y si es 1 será el valor correspondiente, entonces esto se puede resumir en calcular:
El algoritmo consiste en calcular en hacer los siguientes pasos:
El bucle se ejecutará como máximo, el log2 del mínimo. Esto es porque queremos trabajar en aritmética modular, ab modulo n. Para poder atacar el proceso y que no nos desborde el lenguaje de programación que utilicemos.
Para saber si un número es primo o se utiliza la factorización,
si no se pude factorizar es primo, si no sí es primo.
Tenemos problemas en números muy grandes, es difícil de factorizar.
En esto se basa la seguridad RSA, en no poder factorizar un número.
Tenemos un test probabilistico para poder averiguar si un número es primo o
no, aplicando el test varias veces.
Existen dos algoritmos, uno nos da una probabilidad del 50%, pero lo
aplicamos 20 o 30 veces para asegurarnos que es primo o no.
Este algoritmo se conoce como el algoritmo de Leman.
Para generar un número primo, se genera un número aleatorio del número de bits que queramos. Ponemos a 1 los bits más y menos signigicativos (para que realmente sea de m bits (a la izquierda) y para asegurarnos de que sea impar (a la derecha)). Luego cogemos una tabla con números primos menores de 2000, y probamos a dividir nuestro número por los números de esa tabla. Si pasa esta prueba, aplicamos varias veces el test de Leman.
Existen otros números, llamados "primos fuertes", que son primos
relacionados de la siguiente forma:
p y q son primos fuertes si