Estudio sobre la complementariedad del par de claves

Anuncio
ESTUDIO SOBRE LA COMPLEMENTARIEDAD DEL PAR DE CLAVES RSA Y USO DE HERRAMIENTAS DE ACCESO PÚBLICO En el criptosistema asimétrico RSA el cálculo del par de claves (pública/privada) se basa en funciones aritméticas modulares y en la generación de números primos aleatorios de una longitud suficiente (hoy en día se recomienda superior a 1024 bits) que permite la obtención de parámetros robustos que garantizan la fortaleza de las claves generadas. El algoritmo RSA establece la necesidad de cálculo del módulo “n” y la función phi(n), para determinar el valor del exponente de clave pública "e" (1<e< phi(n)) y del exponente de clave privada "d" (d= 1/e mod phi(n)). En este sentido, recordar que el par (e,n) y (d,n) permite el cifrado y descifrado de datos basados en el criptosistema asimétrico de clave pública RSA. Con este trabajo se pretende demostrar la complementariedad del par de claves (público/privada) generadas con el algoritmo RSA, a través de herramientas de acceso público, y cuyos resultados han sido contrastados con cálculos de funciones aritméticos modulares. Para ello, mediante OpenSSL (versión 1.0.1e) [1]1 se ha obtenido un par de claves RSA de longitud 2048 bits a través de dos números primos aleatorios (de 1024 bits cada uno) y módulo “n”. A continuación se ha convertido los números primos “p” y “q” de numeración hexadecimal a decimal, a través de una aplicación descargada en la página web de la Red temática de criptografía y seguridad de la información (Criptored)[22]. • openssl genrsa ‐out Kv_2048 2048 (longitud del módulo 2048 bit) (“e” es 65537 (0x10001)) • openssl rsa ‐in kv_2048 ‐text ‐out p_q_n.txt (Módulo “n”; exponente de clave pública “e”; exponente de clave privada "d", números primos “p” y “q”) Private‐Key: (2048 bit) modulus: 00:b6:a9:3c:fa:60:80:1b:1b:9f:4a:a4:d1:7d:34: c0:24:5b:a9:21:5a:fc:91:99:f0:2c:ee:77:db:fe: b4:22:6b:a7:94:c3:03:68:3a:73:62:ff:f7:8f:ec: 4c:46:e7:cf:43:13:d0:81:9a:6c:f0:3e:6b:16:5e: 97:29:59:e6:d2:6c:46:da:8e:68:76:d1:36:92:72: 21:3e:37:25:05:8b:14:6f:d7:5a:ea:2e:a4:01:6b: f3:11:61:c7:3b:25:da:f5:a2:fa:47:9a:01:f2:94: 47:55:89:ee:fc:63:76:46:f9:0c:a4:71:ba:6e:a5: be:fc:a3:2c:ec:37:bc:10:c3:b6:68:89:14:7a:34: 38:70:fd:cc:32:58:15:e4:85:64:2d:ce:45:2d:e9: 11:f5:70:2d:8c:79:a5:09:0e:16:df:90:b7:68:74: cb:49:a9:30:24:26:9d:0b:64:34:aa:03:df:91:e5: f9:b9:62:db:c4:1e:3c:21:6e:d5:53:23:6d:8f:24: 20:5f:24:95:fc:8b:33:00:84:95:5d:f1:1c:62:fd: 40:33:e0:5d:3e:e1:c3:a0:48:49:75:d2:78:65:de: 1
http://slproweb.com/products/Win32OpenSSL.html 2
http://www.criptored.upm.es/software/sw_m051b.htm CGB, diciembre de 2013 1 e2:11:a0:1b:c2:5d:1c:30:87:55:17:f2:ff:17:14: a4:0e:d3:73:fc:51:32:8f:6a:36:2e:dc:b8:a2:37: a8:db publicExponent: 65537 (0x10001) privateExponent: 15:e3:e6:48:e3:33:b7:0b:f2:65:11:a7:81:67:c6: f7:14:7d:0a:60:4b:10:6f:f0:56:92:25:8f:19:d1: 20:a6:e2:28:73:ce:7e:b9:32:86:d4:c2:28:5f:5b: 2c:cc:2f:0c:8c:dd:5a:0a:d5:af:5c:eb:9c:7c:ad: 84:e9:1f:3e:6c:77:79:4d:c3:bb:29:8b:6e:b5:7a: c2:67:fd:69:d2:a7:1a:58:26:af:15:f3:d5:af:c8: 2b:77:1a:57:3e:4c:25:4f:e8:ca:97:ec:4f:d3:f1: 50:90:fd:31:06:02:70:b2:fc:0e:e1:0a:44:a4:5c: 65:0e:71:1d:c5:f8:25:d1:fa:88:35:d1:cc:d6:91: f1:40:79:08:b0:bf:e4:6e:77:a2:16:3c:35:5e:1f: b6:6f:b8:37:9d:c8:37:23:e1:42:70:b2:79:a0:41: fe:7f:bc:62:11:3d:10:01:c7:df:05:02:e4:13:00: 24:5c:81:24:47:53:1a:36:78:54:d4:ea:85:53:05: 3a:f6:35:ac:3a:c7:23:76:ef:19:99:8e:65:56:28: 74:cc:20:26:53:e9:ed:db:fc:07:96:3d:b0:ad:86: 81:a5:9b:ce:84:85:25:37:6c:5a:f5:e6:09:82:a8: b9:6f:16:c7:72:94:b2:84:78:e8:58:8e:b2:fe:5e: b1 prime1: 00:ec:f1:5b:50:d5:ac:ce:e8:2f:9b:d2:5b:2d:c8: 47:61:f1:03:5a:5c:0f:3a:20:e8:57:d3:8a:a4:9a: 30:a7:41:3f:e6:e3:e6:59:c2:a7:35:4d:64:1c:df: 5d:19:5f:3f:4f:a7:75:d6:38:70:02:7d:d7:0f:fb: 14:ed:5b:ba:d1:85:35:a3:12:7c:72:1b:fb:8d:fb: ec:3b:cd:38:47:0c:99:df:4e:05:88:80:e8:d3:7b: ae:34:7f:df:9d:6b:15:4c:48:2b:6c:4f:af:86:8a: c4:3a:02:3b:10:80:36:fc:61:ca:c7:49:31:82:df: 38:ac:a4:36:12:d6:25:97:9d prime2: 00:c5:5a:39:1b:5d:d9:ea:bf:07:9c:9d:fd:8a:22: 29:aa:dd:7d:54:f6:26:99:f2:67:ef:8f:25:a2:db: 13:a9:2b:a5:fc:d6:15:b9:78:de:d0:57:74:e3:59: a2:11:07:fc:1b:52:39:3d:ed:24:79:6b:8d:24:25: 84:85:bf:90:c9:99:3b:c9:4f:ac:7c:b7:69:66:1a: 1a:f8:bd:bf:28:2a:1b:38:62:48:73:02:07:45:7b: d4:1a:b6:1e:7d:a9:c8:3e:22:3d:8d:7a:e1:9d:ef: 68:70:dc:ab:51:5e:f9:be:7d:41:83:5a:18:72:0c: 55:69:0c:ea:de:01:5c:64:d7 ...............................................................................................................................
............... • java ‐jar dec2hex.jar ‐h (p_hex) (Número primo “p” en formato decimal) 1663868922766420291601757447382417700905405873603249617500060865957846407219
7845291989619881467140916072733646302943104717141378277818334413779127726648
CGB, diciembre de 2013 2 2641971875683448307454578044520230508636048579933967573345784834054024785323
1329497427457539419156086245154433622782548675924040726192488890099855598858
79197 • java ‐jar dec2hex.jar ‐h (q_hex) (Número primo “q” en formato decimal) 1385855920071548060865056649662826175846965651420974580660012875858722177247
6553205575500803077910784394413497676176780061931473960794164894425441640254
5694471933056428024641800379265489326835982895994438670058566869211891167065
1284492370798491788414212387840480150123421353922754937460549808464647971801
91959 Por otro lado, se ha utilizado la herramienta CrypTool (versión 1.4.31)[33] con el objeto de confirmar el módulo “n” obtenido mediante OpenSSL y se ha calculado el valor de la función phi(n) necesarias para la obtención de exponente de la clave privada "d". Como se puede observar el valor obtenido con la herramienta CrypTool (resultado RSA Módulo N) coincide con el cálculo obtenido del módulo “n” con OpenSSL: 2305882596838912933281989921674167335029805900863459242659792491517342377191
6442454817000430664987631045407177561664734832996820388186584380631798694777
5842218329070097988459760388218349560604325828269875263492552593675906716050
2866034746296894193289856192474897345116992540209397582078172279390928305282
4724695058062900670418358711967613205895374029224889528707274056434631725979
2430014789671528251970213932814424494358658792577565180853881904059757173167
9021745934599976483257418981555785107289886046245654259097277663454310932168
0099605182605014856685515205312055104345339933549915721203941266006252676397
944776923 El valor obtenido con CrypTool de phi(n) es: 2305882596838912933281989921674167335029805900863459242659792491517342377191
6442454817000430664987631045407177561664734832996820388186584380631798694777
5842218329070097988459760388218349560604325828269875263492552593675906716050
2866034746296894193289856192474897345116992540209397582078172279390928305282
4724390085578616873583112030557908681507698792072387106287458049060450069120
7962574939915016183515708762767709779960746804099657895630020654128936716231
2118912290219102495624209343713406535306338843098061418472937228283984340572
7711343783625189253564758175448755612968049336546931041637575962136396226040
878705768 Y el resultado del exponente de clave privada “d”, también en CrypTool es: 2763385860746268852403489455548607694786776255455942275638190675248669763715
6375641261077159839909189348097711608605036449388441236067783652819345857879
2356193105652768604202657748915409226694291019612066515017548571147683193899
4691523398601676456673105350519224826975427531135787205645965650294696264657
9090492352737302123246679263317181864376072495374601878752719153656831231651
5455096140820076766610064028377495553933153089002962160654009524013712707215
3
http://www.cryptool.org/en/ CGB, diciembre de 2013 3 7618129778198701649546445547633412412575489459952725083645337594174651419939
6591985302438658528388179304816291039298573247057325846624276608117438387372
79114929 Para contrastar el valor obtenido del exponente "d" (con CrypTool), se descarga una aplicación (bd_funcs) [44] que permite realizar cálculos aritméticos modulares, en concreto el cálculo del inverso modular (a‐1 mod n). En este sentido, recordar que en el algoritmo RSA, d=1/e mod phi(n). • Bd_modinv 65537 phi(n), con objeto de calcular el exponente de clave privada “d”: 2763385860746268852403489455548607694786776255455942275638190675248669763715
6375641261077159839909189348097711608605036449388441236067783652819345857879
2356193105652768604202657748915409226694291019612066515017548571147683193899
4691523398601676456673105350519224826975427531135787205645965650294696264657
9090492352737302123246679263317181864376072495374601878752719153656831231651
5455096140820076766610064028377495553933153089002962160654009524013712707215
7618129778198701649546445547633412412575489459952725083645337594174651419939
6591985302438658528388179304816291039298573247057325846624276608117438387372
79114929 Como puede comprobarse, el resultado obtenido de exponente de clave privada "d" (en CrypTool) es idéntico que el calculado a través de función aritmética modular con bd_funcs, por lo que se puede concluir que el resultado obtenido con la herramienta CrypTool es fruto de la aplicación de las funciones matemáticas de aritmética modular del algoritmo RSA. Por último, para demostrar la complementariedad del par de claves (público/privada), se procede con CrypTool al cifrado del texto "hola" (con relleno en formato decimal) y descifrado mediante la función bd_modexp (cifrado^d mod n). Como se puede comprobar el resultado del descifrado coincide con el contenido del texto "hola" (con relleno en formato decimal) antes indicado. Recordar que en algoritmo RSA: • Cifrado = mensaje (elevado a “e”) (mod n) • Descifrado = Cifrado (elevado a “d”) (mod n) Como ejemplo en CrypTool, el mensaje del texto “hola” con relleno en formato decimal es: 0514989399282813297273905670883621394183888162032817526169457100641690072508
3035515294565706184222226691546345705887131899792645041548752275713956314181
2897120280768382835755846894604288422816139813855790967791891085457658140208
6648727455397849527433092014535489490795135843934757625087914944731690609017
5742492449225221232098359030118730324750898940487708915341210100754465906289
7063984525698083088610928412067912718427463439147224641009393661434305732306
4632723300137369384165011601409573032876054810984453004906403296357912718021
8386318976219234576994382820308522816369043850660650295806161203059608686841
0900512 El resultado obtenido del cifrado con CrypTool es: 4
http://www.di‐mgt.com.au/modarith.html CGB, diciembre de 2013 4 1158302448624386504655739978913593906702487123625963901662860772382296874342
5749200138347747113316836364666459946432311318515154057558250677933409618333
0219445386855583559903426280741570335992563260086548329228821655585435554954
9901849488388590106585404859276441406803821751137359275167701742899382283672
1432962554011541791277944646069915713549703390571890467465508902957434929970
0701384359170293093046637301849843145814876603238283261159051780098664067652
5420146244690283417374319143089993039597731653916497503257842674239386606623
4047202572851727121325461897277737775697291713976068150789579022162494562225
798382923 A continuación se calcula el descifrado con la función bd_funcs (bd_modexp): • Bd_modexp Cifrado (elevado a “d”) mod n 5149893992828132972739056708836213941838881620328175261694571006416900725083
0355152945657061842222266915463457058871318997926450415487522757139563141812
8971202807683828357558468946042884228161398138557909677918910854576581402086
6487274553978495274330920145354894907951358439347576250879149447316906090175
7424924492252212320983590301187303247508989404877089153412101007544659062897
0639845256980830886109284120679127184274634391472246410093936614343057323064
6327233001373693841650116014095730328760548109844530049064032963579127180218
3863189762192345769943828203085228163690438506606502958061612030596086868410
900512 Por tanto, como se acaba de demostrar el descifrado con la función bd_funcs (bd_modexp) proporciona el mismo resultado que el texto con relleno introducido en CrypTool. Para realizar el cifrado/descifrado con el algoritmo RSA utilizando la aplicación CrypTool hay que realizar los siguientes pasos (se muestra un ejemplo con datos reales): • Se elige la opción de cálculo de dos números primos p y q. •
•
Se genera el número primo “p” y “q”. Se selecciona la clave pública “e” (2^16+1). A continuación se obtiene, de forma automática, los parámetros módulo “n”, phi(n) y la clave privada “d”. CGB, diciembre de 2013 5 •
Se selecciona el modo de entrada TEXTO para realizar el cifrado RSA y se introduce el texto a cifrar, obteniendo su cifrado. •
Por último, se calcula el valor de descifrado y se observa que se obtiene el texto en claro original: Madrid, diciembre de 2013 Carlos Guerra Belver Consultor eIDAs CGB, diciembre de 2013 6 
Descargar