Stream Cryptography-Capítulo 2 de la criptografía moderna

Aplicación de cifrado de flujo

Criptografía moderna (Cuarta edición) Capítulo 2 Stream Criptografía Respuesta

(Sistema operativo interno: demasiado potente)

Actualización de nuevo: hay algunos errores en el texto original, el autor ha modificado algunas de las respuestas ...
Segunda actualización: descubrí que algunas preguntas coinciden con el número de la cuarta versión de la criptografía moderna, algunos números y símbolos aritméticos se han cambiado, pero los métodos son correctos

1 Ejemplo 2-3

Se sabe que el estado inicial del registro de desplazamiento de realimentación lineal es {1,0,0,1,1}, y la función de transferencia es f (a1, a2, a3, a4, a5) = a1⊕a4. Encuentre el estado y el período de salida.
Derecho procesal:

#include<bits/stdc++.h>
#define n 5
using namespace std;
int main()
{
    bitset<n>bint(19);
    bitset<n>str(bint);
    string s1;
    cout << "初始状态为:"<<bint.to_string() << endl;
    int co=0;
    do
    {
        s1 += bint[4]+'0';
        int j = bint[4] ^ bint[1];
        bint.operator<<=(1);
        bint[0] = j;
        co++;
    } 
    while (str.to_string() != bint.to_string());
    cout<<"输出序列为:"<<s1<<endl;
    cout<<"周期为:"<<co<<endl;
    return 0;
}

Resultado de salida
Método polinómico característico:
El polinomio característico es p (x) = x4 + x + 1, y la relación recursiva de su secuencia de salida es ak = ak − 2⊕ak − 5, k> = 5
, la secuencia de salida 1001101001000010101110110001111 se puede obtener fácilmente.
Este método es relativamente simple en comparación.

2 ejercicios 2.1

El registro de retroalimentación lineal de tres niveles puede tener cuatro funciones de retroalimentación lineal cuando c3 = 1, y establecer su estado inicial {a1, a2, a3} = (1,0,1) para encontrar la secuencia de salida y el período de cada registro de retroalimentación lineal.
Solución: El polinomio característico puede ser p (x) = x + 1, p (x) = x3 + x + 1, p (x) = x2 + x + 1, p (x) = x3 + x2 + x + 1 , A
su vez:
ak = ak − 3 secuencia de salida cuando p (x) = x + 1: 101101… p = 3
ak = ak − 1⊕ak − 3 secuencia de salida cuando p (x) = x3 + x + 1 : 10100111010011… p = 7
cuando p (x) = x2 + x + 1 ak = ak − 2⊕ak − 3 secuencia de salida: 10111001011100… p = 7
cuando p (x) = x3 + x2 + x + 1 = secuencia de salida ak − 1⊕ak − 2⊕ak − 3: 1010… p = 2

3 Ejercicio 2.4

Deje que el flujo de claves sea generado por m = 2s nivel LFSR, y los primeros m + 2 bits son (01) s + 1, es decir, s + 1 01. Pregunte si el bit m + 3 podría ser 1, ¿por qué?
Solución: Según la
pregunta, el diagrama de transición de estado LFSR es

f1 0 0 1
s 0 1 -
- - -
s 1 - 0 0
f2 0 0 1
s 0 s 1 -
- - -
s 1 - s 0

El período de la secuencia de salida es 2, el ciclo de la secuencia de salida es 01 y el bit m + 2 es 1. El bit m + 3 de la ecuación de transición de estado es 0, y es imposible ser 1.

4 Ejercicio 2.5

Supongamos que el flujo de claves se genera mediante LFSR de nivel n, y su período es 2n − 1, i es cualquier número entero positivo. Considere el par de bits en el flujo de claves:
(Si, Si + 1), (Si + 1, Si + 2), ⋯, (Si + 2n − 3, Si + 2n − 2), (Si + 2n − 2, Si + 2n − 1)
pregunte cuántos son (Si, Si + 1) = (1,1) Par de bits? Demuestra tu conclusión.

Solución:
Total ((i + 2n − 2) - (i)) / 2 = (2n − 1−1) Para pares de bits, el número total de bits incluidos = 2n − 1, que es
2n − 2−1 antes de asumir el período Los pares de bits son todos los pares de bits de la forma (Si, Si + 1) = (0,0), que se pueden obtener por el teorema 2-7. El número de ocurrencias de 1 es 2n − 1−0 El número de ocurrencias = 2n − 1, Es decir, los pares de bits restantes son todos los pares de bits de la forma
(Si, Si + 1) = (1,1), es decir, la respuesta es 2n − 2.
Lo siguiente demuestra la generalidad:
del Teorema 2-7- (2), hay 2n − i − 1/2 corridas de longitud i, y cada una de 0 y 1 es la mitad, 1 corrida de longitud n es una y la longitud es i La ejecución de 1 puede formar i-1 pares de bits de la forma (Si, Si + 1) = (1,1).
N = ∑n − 2i = 22n − i − 1/2 ∗ (i − 1) + n = 2n − 2

5 ejercicios 2.6

Se conoce la cadena de texto cifrado 1010110110 y la cadena de texto sin formato 0100010001 del cifrado de flujo, y se sabe que el flujo de clave se genera utilizando un registro de desplazamiento de retroalimentación lineal de tres niveles para intentar descifrar el sistema de cifrado.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

6 Ejercicios 2.7

Si el generador de claves del cifrado de flujo de adición binario en GF (2) es un registro de desplazamiento de retroalimentación lineal de nivel n, la clave generada es la secuencia m. Se sabe en la Sección 2.5 que si el adversario conoce un par de texto cifrado con una longitud de 2n, puede descifrar el generador de flujo de clave. Si el adversario solo conoce 2n-2 pares de texto cifrado, pregunte cómo descifrar el generador de flujo de clave.

Solución: Los posibles 2n − 1, 2n posibles casos exhaustivos del adversario son {00,01,10,11}, e intenta descifrar cada uno de los cuatro casos uno por uno.

7 Ejercicio 2.8

Supongamos que {ak} y {bk} en el activador JK son 3 y 4 niveles de secreto de secuencia m, respectivamente, y
{ak} = 11101001110100 ⋯
{bk} = 001011011011000001011011011000 ⋯

Encuentre la secuencia de salida {ck} y el período.

Solución
mcd (3,4) = 1, período p = (23−1) ∗ (24−1) = 7 ∗ 15 = 105
expresión por JK trigger
ck = {aknot bkif ck − 1 = 0if ck − 1 = 1

Sea c − 1 = 0 la secuencia de salida es: {110010010101111110100101100011110001100100111110010101101111110101100010111110100100101111110101101100111}
C ++ implementa el disparador JK:

#include<bits/stdc++.h>
#define N 105 
using namespace std;
int main(){
    string a="1110100";
    string b="001011011011000"; 
    while(a.size()<=N)a+=a;
    while(b.size()<=N)b+=b;
    int tmp=a[0]-'0';
    cout<<tmp;
    for(int i=1;i<N;++i,tmp=tmp==0?a[i]-'0':b[i]=='0'?1:0)cout<<tmp;
    return 0;
}

8 ejercicios 2.9

Deje que los relojes básicos del generador de secuencia con reloj {ak} y {bk} sean las secuencias m de segundo y tercer nivel, respectivamente, y
{ak} = 10101 ⋯
{bk} = 10011011001101 ⋯
Encuentre la secuencia de salida {ck} y el período.

Solución:
el período de secuencia {ak} es 3, y el período de secuencia {bk} es 7, entonces el período de secuencia {ck} es 3 * 7 = 21
j = 0ck = {ck − 1b ++ jif ak = 0if ak = 1

La secuencia de salida es: 100011100111000111011 Implementación de
C ++:

#include<bits/stdc++.h>
#define N 21
using namespace std;
int main(){
    string a="101";
    string b="1001101"; 
    while(a.size()<=N+1)a+=a;
    while(b.size()<=N+1)b+=b;
    int j=0;
    int tmp=b[j]-'0';
    for(int i=0;i<N;++i){
        cout<<tmp;
        if(a[i]=='1')tmp=b[++j]-'0';
    }
    return 0;
}

9 9

Supongamos que el polinomio característico del registro de desplazamiento de realimentación lineal de nivel n es p (x), y el estado inicial es (a1, a2, ⋯, an) = (00 ⋯ 01), lo que demuestra que el período de la secuencia de salida es igual al orden de p (x)
** Estilo atrevido **

10

Inserte la descripción de la imagen aquí
Tomado de blogs shylocks Parque

Publicado 38 artículos originales · ganó 11 · vistas 3838

Supongo que te gusta

Origin blog.csdn.net/qq_43721475/article/details/104802733
Recomendado
Clasificación