WO 2004/047361 Al lili II II I I II' I 11,:! II ?G???G II I ! III: II I !!
(84.) Designated States (regional): ARIPO patenl (GH, GM, Published: KE, LS, W, MZ, SD, SL, SZ, TZ, UG, ZM, ZW), — with imernational search repon Eurasian patent ( AM, AZ. BY, KG. KZ. MD. BU, TJ, TM), European palent (AT, BE. BG, CH, CY, CZ, DE, DK, EE. ES, H. FR, GB. GR, "HU, EE, IT, LU, MC, NL, FE RO, For hi'o-letter codes aiid oúter abbreviaiions. refer to jhe "Guid- SE, SI, SK: TR), OAPI patent (BF, BJ, CR CG, CI, CM, ance Noles on Codes and Abbreviaiions " appearíng at íhe begin- GA, GN, GQ, GW, ML, MR. E, SN, TD, TG). ning of each regular iss e of íhe PCX Gazelle.
I-IETODO PARA GENERAR UNA CIFRA DE CORRIENTE USANDO MÚLTIPLES CLAVES Referencia a Solicitudes Relacionadas Esta solicitud es una continuación en parte de la Solicitud de Patente de Estados Unidos No. 10/299,847 presentada el 20 de noviembre de 2002, que está pendiente Campo Técnico La invención se relaciona con el campo de métodos de encripción y más particularmente con un método para generar una cifra de corriente para encriptar comunicaciones electrónicas que pueden ser extremadamente largas . Técnica Anterior Son bien conocidos en el ramo diversos métodos de encripción para proporcionar comunicaciones electrónicas seguras . En métodos simétricos de encripción, el que envía y el recipiente usan el mismo código o clave para encriptar y descifrar el mensaje. La única cifra completamente eegura que no se puede posiblemente romper o descifrar es el Adaptador de Un Tiempo (OTP) . Un OTP tomar una corriente de bits que contiene el mensaje de texto sencillo, y una corriente de bit al azar secreto de la misma longitud que el texto sencillo (la clave) . Para encriptar el texto completo que la clave, cada par de bits de la clave y el texto completo se accionan en secuencia mediante la función exclusiva o para obtener un bit de texto de cifra. El texto de cifra no se puede descifrar si la clave es verdaderamente aleatoria y la clave se mantiene secreta a una parte no autorizada. El problema con este método es que solamente la cave debe ser cuando menos de la misma longitud que el mensaje. Si se usa una clave más corta y se repite entonces la cifra se puede romper. En algunos casos, el dato que necesita encriptarse es extremadamente largo. Por lo tanto, existe la necesidad un método para generar una clave al azar, u OTP, que sea de longitud variable y que permita la encripción de cantidades muy grandes de datos . Exposición de la Invención La presente invención, por lo tanto, proporciona un método para generar una cifra de corriente que tiene x bytes de longitud, el método comprendiendo los pasos de (i) seleccionar un número n de subclaves cada una teniendo una longitud de no repetición única de p¾. bytes; (ii) generar n números al azar, uno para cada subclave, cada uno teniendo longitud de mn bytes; (iii). generar un numero R al azar n+l°; (iv) ajusfar p= Modmn(R); (v) para cada byte cuya posición en el número n al azar es p aplicando una función a todos los n bytes para generar un valor; (vi) concatenar el valor al final de la cifra de corriente, (vii) ajusfar p=p+l; y (viii) repetir el paso (v) , (vi) y (vii) hasta que la cifra de corriente es x bytes de longitud. De preferencia la longitud m seleccionada de cada subclave es un número primario. El método también puede incluir el paso adicional de aplicar una función de deslinearización a la cifra de corriente. De conformidad con un aspecto de la invención cada uno de los n números al azar se genera: (i) generando un número al azar n + 2o que no es un cuadrado perfecto; (ü) calculando la raiz cuadrada del n + 2o número al azar,
(iii) generar un n + 3o número al azar; (iv) comenzando con un dígito cuya posición en el n + 2o número al azar se calcula basado en el n + 3° número al azar, tomar sartas de dígitos finitas en secuencia y convertir cada finita en un byte; (v) concatenar cada byte en secuencia hasta que la longitud mn seleccionada de cada uno de los n números al azar se ha alcanzado. La invención proporciona además un producto de programa de computadora, un artículo para llevar a cabo el método, y un sistema de procesamiento de datos para llevar a cabo el método. Breve Descripción de los Dibujos En los dibujos que describen una modalidad preferida de la invención: La Figura 1 es una ilustración esquemática de un sistema de computadora para llevar a cabo el método de la invención; y La Figura 2 es una gráfica de flujo que ilustra el método de la invención. Mejor Modo para Llevar a Cabo la Invención La Figura 2 ilustra a través de una gráfica de flujo el método para generar la clave de encripción de la presente invención. En particular una clave de encripción, una cifra de corriente de no repetición de longitud indefinida referida en la presente como la Super Clave, se forma combinando subclaves. Cualquier número n de subclaves K2, Kn se puede especificar dependiendo de la aplicación. Entre mayor es el número de subclaves, mayor es la longitud de la Super Clave de no repetición. La longitud de cada subclave es un número primario de bytes
(de preferencia con números primarios mayores de 10). El primer paso en el proceso es determinar qué tan grande una Super Clave, o cifra de corriente, se despliega. El número de n subclaves y la longitud mn no repetitiva de cada subclave, en bytes, se seleccionan. Las subclaves tienen cada una, una longitud no repetitiva única, es decir, ningunas dos subclaves son de la misma longitud no repetitiva. De preferencia las longitudes no repetitivas de subclase son números primarios de bytes. De preferencia la longitud de las subclaves, en bytes, son números primarios en la escala de 2, 3, 5, ..., 1021, ya que hay 172 números primarios diferentes en esta escala. La selección se puede hacer dando entrada manualmente al número de subclaves y sus longitudes no repetitivas de número primario. Alternativamente, el número de claves y sus longitudes no repetitivas de número primario se programa en una aplicación, o un programa selecciona al azar el número de subclaves y su longitud no repetitiva. Para n subclaves Kn, la longitud no repetitiva de la Super Clave será el tamaño (¾) X Tamaño ( 2) X Tamaño (¾) ... X Tamaño ( n) . Por e emplo, se supone que se usan 10 subclaves de las siguientes longitudes no repetitivas de número primario: Subelave 1 = 13 bytes = Ki Subclave 2 = 17 bytes = ¾ Subclave 3 = 19 bytes = K3 Subclave 4 = 23 bytes = ¾ Subclave 5 = 29 bytes — 5 Subclave 6 = 31 bytes = K6 Subclave 7 = 37 bytes = K7 Subclave 8 = 41 bytes = 8 Subclave 9 = 43 bytes = ¾ Subclave 10 = = 47 bytes - La longitud de Superclave no repetitiva resultante es 13X 17X 19X 23X 29X 31 X 37X 41X 43X 47 = 266,186,053,068,611 bytes. De esta manera, usando un número pequeño de subclaves, cada una de número primario pequeño la longitud no repetitiva resulta en una Superclave no repetitiva extremadamente larga. La definición total para el tamaño de la Superclave anterior está contenida en
300 bytes (la suma de los longitudes de las subclaves no repetitivas) y el titulo (numero de subclaves y sus longitudes) . De esta manera, la definición total para una Superclave será una fracción del tamaño de la Superclave. Aún cuando de preferencia la longitud no repetitiva de cada subclave es un número primario de bytes, para mejorar la calidad aleatoria de la cifra resultante, el método también trabajará si se usan longitudes de número no primario, en tanto que la cifra resultante sea muy grande . Para seleccionar el número de subclaves, de preferencia este se calcula tomando los primeros dos dígitos generados por una corriente alteatorisa, MODed por 50 y añadiendo 50 para proporcionar número de claves entre 50 y 99. Cada subclave del proceso de múltiples claves se puede crear como sigue. Primero se genera un número al azar que no es un cuadrado perfecto, de preferencia por fuente altamente aleatoria. De preferencia es un entero en la escala de 500 a 700 dígitos. Esto sirve como un "primer valor de siembra" 0. Se verifica que el valor O seleccionado no sea un cuadrado perfecto. Si lo es, entonces valores aleatorios adicionales se generarán hasta que se llena este criterio. El segundo valor de siembra es un valor de 32-bit que se usa para sembrar ,1a función al azar de la computadora. Los generadores de número aleatorio que se incluyen en los sistemas de operación de la mayoría de las computadoras son pseudo-aleatorios y no muy robustos. Estos valores, sin embargo, son suficientes como un punto de partida. El segundo número aleatorio P también se genera de la función aleatoria de la computadora. Luego de MODed por 100 para a ustar el punto de partida. La raíz cuadrada Q del primer valor 0 de siembra se calcula, resultando en un número Q irracional (uno que se extiende infinitamente después del punto decimal y es no repetitivo) . La sarta de dígitos resultante después del punto decimal es potencialmente infinita en longitud y es altamente aleatoria. La computadora descarta los dígitos en frente del decimal y computa el número Q hasta dígitos P después del decimal.
Luego, empezando en el dígito Pl de Q después del punto decimal, la computadora selecciona en secuencia 4 dígitos en un tiempo, y calcula el valor Mod 256 de los 4 dígitos. Estos resulta en un valor de 8 bits. Este valor se usa como el primer byte de la subclave. Este proceso se repite 4 dígitos a la vez, continuando con los siguientes dígitos en secuencia, hasta que una sarta de datos aleatorios igual a la longitud no repetitiva de número primario de la subclave que se está creando se completa. Este proceso se repite para todas las subclaves hasta " que la longitud no repetitiva para todas las subclaves se crea. Cada subclave luego se forma tomando las sartas de bytes no repetitivas creadas de esta manera, y repitiéndola tan frecuentemente como sea necesario para formar un subclave de longitud uficíente para crear una Superclave en combinación con las otras subclaves. El algoritmo para generar las subclaves se puede describir como sigue: 1. Tratar la semilla 1 como la representación decimal de un entero en la escala de 500-700 dígitos. 2. Dejar X: = semilla 1 3. Dejar X: = es el número irracional generado sacando raíz cuadrada de X 4. Dejar Za, Z2, Z3, Z, .., que sean los dígito después del punto decimal en la representación decimal de ?. Cada Za está en la escala de 0, ..,9. 5. llamar saleatorio ( semilla2 ) . // solamente la primera vez 6. Llamar aleatorioO para obtener el punto de partida irracional, iniciar.
7. Dejar iniciar. = aleatorio= mod 100., el inicio es en la escala 0, 1, .., 99. 8. Descartar Zx y Z2 todo el a+camino a Zlniciar. 9. Dejar tmp: = 10*Z(iJlícílíI + u + Z (iniciar + D - Descartar aquellos valores usados . 10. Dejar n : = 50 + (tmp mod 50) ., n está en la escala de 50, 51, .., 99. 11. Para y := l,2,..,n, hacer: 12: Dejar j = 3^ (i-1) 13. Dejar tmp que sea el siguiente byte de la corriente Z.
14. Dejar tmp := 100*Zj+i + 10*j+2 + Zj+3 15. Dejar t := 172 - (tmp mod 172), t está en la escala de 1,2, .. , 172. 16. Dejar que u sea el primario entre la secuencia 2, 3, 5,.., 1021. 17. Si u es igual a cualquiera de l1, lz, ... , lfi_li, ajustar t a (5+l)mod 172 ir a 16 18. Ajustar l1 = u 19. Siguiente I: ir a 11 hasta que se ajustan todos los tamaños de subclave. 20. Para i:= l,2,..,n, hacer: 21. Para j:= 0, l,2,..,li, hacer: 22. Dejar k := 4*j 23. Dejar tmp que sea el siguiente byte para la corriente Z 24. Dejar tmp : = {1000+?* + 100*ZX+1 + 10*Zk+2 + Zx+3) mod 256
25. Dejar := tmp 26. Siguiente j : Siguiente byte de subclave 27. Siguiente I: Siguiente subclave 28. Para i:= 0, 1, 2, .. , 255, hacer: 29. Dejar j := 4*i 30. Dejar tmp := (1000*Zj + 100*Zj+1 + 10*Zj+2 +Zj+3) mod 256
31. Si tmp es igual a cualquiera de S[0], S[l], . • r S[i--1] / ajustar a (tmp+l)mod 256 ir a 31 32. Ajustar S [i] := tmp. 33. Siguiente i 34. Dejar desviar := ZiZi+i... Zíi9 35. Regresar n, (l1, l2, .. , ln) , (s1, s2, .. , sn) , S[256] y desviar. 36. Guardar en archivo de clave y añadir semilla 1 y valor de inicio a DB 37. Incrementar semilla 1 e ir a 2 // repetir hasta que se crean suficientes claves. Una vez que se crean todas las subclaves como arriba, la Super Clave (cifra) se crea a la longitud requerida. Esto significa que la Super Clave continuará siendo creada para encriptar el dato asociado que se va a encriptar, y continúa siendo creado hasta que todo el dato se encripta. Primero un número aleatorio R ("tercer valor do semilla", o la desviación de inicio para la Super Clave, en oposición al punto de partida P para el número Q) se general. Empezando con cualquiera de las n subclaves, que tienen longitud mn, el Modmn de R se calcula y el Modirin(R) byte de cada subclave es consecutivamente exclusivo-or' d (X/OR'd) con el byte Modmn(R) correspondiente de cada tercer subclave. Por ejemplo, si R=100, y la longitud de la primera subclave es 97 bytes y la segunda subclave 43 bytes, entonces el 3er byte de subclave 1 se selecciona y X|OR'd con el 14° byte de subclave 2 y bytes correspondientes de las otras subclaves restantes seleccionadas de la misma forma basadas en R. El proceso se repite hasta que todos los bytes seleccionados de cada subclave se han X/OR'd. El valor resultante puede entonces ponerse a través de una cifra de substitución u otra función de deslinearización para deslinealizar la corriente de Super Clave, como se describe adicionalmente abajo. El valor binario resultante luego se añade a la Super Clave por concatenación. El siguiente byte subsecuente de la subclave 1 es entonces X|OR d con el siguiente byte de la subclave 2 y asi sucesivamente. Nuevamente el proceso se repite hasta que todos los bytes seleccionados de cada subclave se han X/OR'd y deslinealizado. El valor binario resultante de cada función se añade nuevamente a la Super Clave mediante concatenación. Mientras que se prefiere la función X/OR, será evidente que se pueden aplicar otras funciones. Por ejemplo, se pueden usar funciones matemáticas de adición o resta. A medida que cada byte de la Super Clave se genera, el byte correspondiente del mensaje de texto completo luego se encripta con el byte correspondiente de la Superclave mediante la función exclusiva o función de alguna otra función matemática. Una vez que todos los bytes del mensaje de texto completo se han encriptado, termina la generación de la Super Clave. El mensaje encriptado puede luego descifrarse aplicando el inverso de la función de encriptado al mismo y la Super Clave . Para ilustrar adicionalmente la generación de la Super Clave de las subclaves, se deja Sa)j denotar el byte j de la "subclave" i. Se deja l(i> denotar la longitud de la subclave i. Por ejemplo, podríamos tener la> = 13, 1() . ) 17, y asi sucesivamente. Crear de la "subclave" i la secuencia sin fin de bytes "-50 r >l r 2 f . . . r o 1(1) r ü0 / ¿>1 · · · Se deja que Sa)j denote el byte j de la secuencia anterior, si j es cualquier número 0 natural a 00; el valor más bajo de j en el subscripto de S(1)¿ es Rmódulo l > en donde R es un número aleatorio. Luego, el byte j de la "Super Clave", llamarlo Z-¡, se define por ¾ = Swi + S(2!d * ... + Sín>-i Aquí, "+" denota la operación XOR. El primer byte de la Super Clave es: Zi + ... + Sfe iínJ En donde Rmod Iw; regresa un entero en la escala 0,1,2,..., (la> - 1) La "SuperClave" tiene un valor j que varia de 0 a ( (l > x 1(2> x 1'3) .. , l!n))-l) . Se deja P0, Pi, 2, P3... , sean los bytes del texto sencillo, y C0,Ci..., los bytes del texto de cifra, en orden. Asimismo, ??,??..., denota los bytes de la "Super Clave" (computado como ya se describió arriba) . Definimos el texto de cifra por C¿ := Pi x o S[ZÍ]. El texto de cifra C se forma concatenando los bytes C0,Ci.., y luego C se regresa como el resultado del proceso de encripción. El descifrado trabajo en reversa en la forma evidente. Para encriptar un texto completo de L-byte, se genera una Super Clave de L-byte y el contador T de número grande se usa para contar el número de bytes en el texto completo. La salida es un texto de cifra de L-byte. Para descifrar el texto de cifra, el mismo contador T de número grande se usa y la salida es el texto completo de L-byte. A fin de reducir la linealidad del texto de cifra usando el presente método, se puede aplicar un paso adicional a la Super Clave antes de que se encripte el mensaje de texto completo. En la modalidad preferida, una cifra de substitución se aplica a la Super Clave, y la sarta resultante se usa luego para encriptar el mensaje de texto completo. Por ejemplo, una disposición de 256 bytes únicos se crea, de 1 a 256 ordenados aleatoriamente. El primer byte en la super clave luego se substituyó para el mismo el valor del byte x+l° en la Super Clave, en donde x es el primer valor en la disposición de 256 bytes. El segundo byte en la Super Clave luego se substituyó par el mismo el valor del y+2° byte en la Super Clave, en donde y es el segundo valor en la disposición de 256 bytes, y asi sucesivamente. La disposición de 256 bytes se puede formar de una de las subclaves, taponando los bytes de una subclase hacia la disposición en tanto que no repiten una entrada previa en la disposición. La linealidad del texto de cifra se puede reducir aplicando también la cifra de substitución al mensaje encriptado (texto de cifra) , sin embargo, es más efectivo aplicar una cifra de substitución a la Super Clave antes de encriptar. Otras utilidades además de una cifra de substitución se pueden usar para romper la linealidad, tal como utilidades de función no lineal invertible (INLF) disponibles de SANDIA labs. Estos son útiles para proporcionar protección contra el ataque Berlekamp-Masse . Mientras que preferentemente la sarta no repetitiva aleatoria que forma cada subclave se genera como as describe arriba, el método también trabajará si la sarta no repetitiva de cada subclase se genera simplemente por un generador de número aleatorio para formar cada subclase, en tanto que la longitud resultante total de la Super clave es suficientemente grande de modo que la Super Clave resultante es cuando menos el doble del tamaño del dato que se va a encriptar. El método anterior se puede usar para producir un sistema de seguridad personal mediante el que la clave se usa para encriptar archivos personales que el usuario desea asegurar. En ese caso ningún método de distribución de la clave se requerirá. A medida que cada archivo se encripta un numero archivo denominado {OLDFILENAKE} . {OFFSET} .wn. El 0LDFI1ENAME incluye la extensión para permitir el descifrado sencillo y mantener el mismo formato de archivo para funcionalidad. A medida que cada archivo se encripta, se descifra inmediatamente y se compara con el original y luego ambas la copia de prueba y el archivo original se omiten usando un proceso de omisión de barrido limpio (archivo completo escrito nuevamente como 0 y luego como 1 y luego se omite] . Un formato de archivo clave preferido se define como sigue: typedef struct wndeyfiletype { char campo [2] ; //debe ser WN para identificar formato de archivo versión larga; // número de versión de tipo de archivo para permitir cambios NÚMEROGRANDE desviado; // la desviación es un número grande almacenado como un //sarta de dígitos decimales delineados por "rrfs numsk largo; // el número de subclaves sklen [musk] largo; // las longitudes de subclave individuales char ski [sklen [1] ] ; // la Ia subclave char ski [sklen [2] ] ; // la 2a subclave char ski [sklen [3] ] ; // la 3a subclave
char sknumsk [sklen [numsk] ] ; // la subclave numsk char substitu [256] ; // la clave de cifra de substitución } WNKEYFILE; El formato de archivo de clave anterior es convencional. El único valor diferente es la desviación que se almacena en una sarta de dígitos decimales que están delineados por "'s. Un ejemplo de este sería "987654321", esto permite que valores que varían hasta 1000 dígitos de largo que impide el nuevo uso de secciones de la corriente de clave si la desviación se implementa apropiadamente. La presente invención se describe arriba como un método implementado en computadora, por ejemplo, para oncriptar y descifrar comunicaciones entre computadoras 14 y 16 a través de la red 12. También se puede modalizar como un aparato de hardware de computadora, código de software de computadora o una combinación de los mismos. La invención también se puede modalizar como un medio de almacenamiento legible por computadora que modaliza código para implementar la invención. Este medio de a macenamiento puede ser magnético u óptico, disco duro o suave, CD-ROM, firmware xx otro medio de almacenamiento. La invención también se puede modalizar en una señal portadora modulada legible por computadora. Como será evidente a aquellos expertos en el ramo en la luz de la exposición anterior, son posibles muchas alteraciones y modificaciones en la práctica de esta invención sin abandonar el espíritu o alcance de la misma. Consecuentemente, el alcance de la invención se debe considerar de conformidad con la substancia definida por las siguientes reivindicaciones.