elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 [5]
41  Programación / Desarrollo Web / [APORTE] Funciones principales OpenPGP.js en: 31 Agosto 2015, 22:00 pm
Esto empezó como una duda, pero mientras la explicaba pude resolver el problema, aunque, la verdad, me costó bastante, así que he decidido mostrar una explicación de las funciones de OpenPGP.js. Costó bastante resolver algunos problemas porque hay poca documentación, y la que hay es poco explicativa, y como imagino que habrá gente en mi misma situación, pues aquí pongo las soluciones a los problemas que me planteé; también, para presentar un manual medianamente completo, he estudiado algunas funciones que no necesitaba, o también añado mi implementación de algunas funciones que sí están bien documentadas [el caso de generateKeyPair(), de encryptMessage() y decryptMessage()].
Sinceramente no sé dónde colocar esto, he leído las normas del subforo y dice que solo dudas, no sé si valdrán aportes.

OpenPGP.js es una librería en javascript que implementa, si no todas, prácticamente todas las funciones del protocolo OpenPGP.
Su página de GitHub: http://www.github.com/openpgpjs/openpgpjs
El corazón de la librería está en /dist/ y se llama openpgp.js (no se va a llamar sardinasEnlatadas.js) .
Así que a partir de ahora lo incluimos siempre en la cabeza:
Código:
<script src="openpgp.js" type="text/javascript"></script>
Todas las funciones ya vienen en ese archivo, de manera que no hace falta almacenar el resto del proyecto.

Bueno, empecemos con el código:



Generar un keypair (pareja de claves, pública y privada):
Código
  1. //Especificamos la contrasena con la que se cifrara la clave privada
  2. var pass = "holasoyunacontrasena";
  3. //Definimos el email del propietario de las claves
  4. var email = '<' + document.getElementById("mail").value + '>';
  5. //El nombre de usuario
  6. var user = document.getElementById("user").value;
  7.  
  8. //Se juntan nombre de usuario e email para formar el KeyID
  9. var id = user + ' ' + email;
  10.  
  11. //Generamos las claves
  12. var clave = openpgp  //   Tamano    KeyID        Contrasena
  13. .generateKeyPair({numBits: 2048, userId: id, passphrase: pass})
  14. .then(function(keyPair)
  15. {   //Mostramos los resultados
  16.    document.write('<pre>' + keyPair.privateKeyArmored + '</pre>');
  17.    document.write('<pre>' + keyPair.publicKeyArmored + '</pre>');
  18. });
  19.  

Cifrar:
Código
  1. //Definimos la clave publica con la que cifrar
  2. var key = '-----BEGIN PGP PUBLIC KEY BLOCK----- . . .';
  3. //Leemos dicha clave
  4. var publicKey = openpgp.key.readArmored(key);
  5.  
  6. //Ciframos
  7. openpgp.encryptMessage
  8. (
  9.    publicKey.keys, //Clave publica
  10.    "Message"       //Mensaje a cifrar
  11. )
  12. .then(function(pgpMessage){
  13.    //Mostramos el resultado
  14.    document.write('<pre>' + pgpMessage + '</pre>');
  15. })
  16.  

Descifrar:
Código
  1. //Definimos la clave privada para descifrar
  2. var key = '-----BEGIN PGP PRIVATE KEY BLOCK----- . . .';
  3. //La leemos
  4. var privateKey = openpgp.key.readArmored(key).keys[0];
  5. //La desciframos con la contrasena
  6. privateKey.decrypt("holasoyunacontrasena");
  7.  
  8. //Definimos el mensaje cifrado
  9. var pgpMessage = '-----BEGIN PGP MESSAGE----- . . .';
  10. //Leemos el mensaje
  11. pgpMessage = openpgp.message.readArmored(pgpMessage);
  12.  
  13. //Desciframos
  14. openpgp.decryptMessage
  15. (
  16.    privateKey,
  17.    pgpMessage
  18. )
  19. .then(function(plaintext){
  20.     //Mostramos el resultado
  21.     document.write('<pre>' + plaintext + '</pre>');
  22. })
  23.  

Firmar:
Código
  1. //Definimos clave privada
  2. var PVK = '-----BEGIN PGP PRIVATE KEY BLOCK----- . . .';
  3. //La leemos
  4. var privKeys = openpgp.key.readArmored(PVK);
  5. var privKey = privKeys.keys[0];
  6. //La desciframos
  7. privKey.decrypt("holasoyunacontrasena");
  8. //Firmamos
  9. openpgp.signClearMessage
  10. (
  11.    privKeys.keys, //Clave privada
  12.    "Message"      //Mensaje
  13. )
  14. .then(function(signed)
  15. {
  16.    //Mostramos el mensaje firmado
  17.    document.write('<pre>' + signed + '</pre>');
  18. });
  19.  

Verificar:
Código
  1. //Indicamos la clave publica
  2. var PBK = '-----BEGIN PGP PUBLIC KEY BLOCK----- . . .';
  3. //La leemos
  4. var publicKeys = openpgp.key.readArmored(PBK);
  5. //Definimos el mensaje firmado, con sus dos partes, el mensaje y la firma
  6. var tmp = '-----BEGIN PGP SIGNED MESSAGE----- . . .';
  7. //Leemos el mensaje firmado
  8. var message = openpgp.cleartext.readArmored(tmp);
  9. //Verificamos
  10. openpgp.verifyClearSignedMessage
  11. (
  12.    publicKeys.keys, //Clave pública
  13.    message          //Mensaje firmado
  14. )
  15. .then(function(verified)
  16. {
  17.    if(verified.signatures[0].valid == true)
  18.    {   //Si la firma es valida
  19.        document.write(verified.text); //Muestra el contenido del mensaje
  20.        document.write('<pre>FIRMA VALIDA!</pre>');
  21.    }
  22.    else
  23.    {   //Si NO es valida
  24.        document.write('<pre>¡FIRMA NO VALIDA!</pre>');
  25.    }
  26. });
  27.  

Firmar y cifrar (este particularmente me costó lograr que funcione):
Código
  1. //Se define la clave publica (con la que se cifra)
  2. var PBK = '-----BEGIN PGP PUBLIC KEY BLOCK----- . . .';
  3. //Se define la clave privada (con la que se firma)
  4. var PVK = '-----BEGIN PGP PRIVATE KEY BLOCK----- . . .';
  5.  
  6. //Leemos ambas claves
  7. var publicKey = openpgp.key.readArmored(PBK);
  8. var privateKey = openpgp.key.readArmored(PVK).keys[0];
  9.  
  10. //Desciframos con nuestra contrasena la clave privada
  11. privateKey.decrypt("holasoyunacontrasena");
  12.  
  13. //Firmamos y ciframos
  14. openpgp.signAndEncryptMessage
  15. (
  16.    publicKey.keys, //Clave publica
  17.    privateKey,       //Clave privada
  18.    "Message"        //Mensaje a procesar
  19. )
  20. .then(function(pgpMessage)
  21. {   //Mostramos el resultado
  22.    document.write('<pre>\n' + pgpMessage + '</pre>');
  23. })
  24.  

Descifrar y verificar (este también fue un lío dominarlo):
Código
  1. //Claves
  2. var PBK = '-----BEGIN PGP PUBLIC KEY BLOCK----- . . .';
  3. var PVK = '-----BEGIN PGP PRIVATE KEY BLOCK----- . . .';
  4. //Leemos
  5. var publicKeys = openpgp.key.readArmored(PBK);
  6. var privateKey = openpgp.key.readArmored(PVK).keys[0];
  7. //Desciframos
  8. privateKey.decrypt("holasoyunacontrasena");
  9.  
  10. //Mensaje
  11. var pgpMessage = '-----BEGIN PGP MESSAGE----- . . .';
  12. //Leemos mensaje
  13. message = openpgp.message.readArmored(pgpMessage);
  14. //Desciframos y verificamos
  15. openpgp.decryptAndVerifyMessage
  16. (
  17.    privateKey, //Clave privada
  18.    publicKeys.keys, //Clave pública
  19.    message //Mensaje firmado y cifrado
  20. )
  21. .then(function(verified)
  22. {
  23.    if(verified.signatures[0].valid == true)
  24.    {//Si es valida la firma
  25.        document.write(verified.text); //Esto muestra el contenido del mensaje
  26.        document.write("VALIDA!"); //Indicamos su validez
  27.    }
  28.    else
  29.    {//Si NO es valida
  30.        document.write("NO VALIDA!"); //Indicamos su invalidez
  31.    }
  32. });
  33.  

Si alguno no funciona, avisadme, por favor...
42  Programación / PHP / Re: Hola amigos alguien seria tan amable diciendome que tengo mal en este codigo? en: 31 Agosto 2015, 21:39 pm
Si indicaras el error que te devuelve...

Y no utilices tanto "&nbsp;", es "antiestético" en el código, es demasiado chapuzas.
Si quieres centrarlo, usa <center>...</center> , o <p style="margin-left: 50%">...</p>, modificando el porcentaje para aumentar o disminuir el margen izquierdo.
43  Seguridad Informática / Criptografía / Re: Inside the NSA: America's Cyber Secrets [Full Documentary] en: 31 Agosto 2015, 00:36 am
Por muy potentes que sean los ordenadores de la NSA, no pueden hacerlo todo.
Desarrollo:

Pongamos que quieren usar fuerza bruta contra un hash, no sería raro que se encontrasen con que para recorrer todas las posibilidades necesiten calcular 2^512 claves. Si le repartimos el cálculo de cada clave entre todos los átomos del Universo
(todo van a ser aproximaciones muy inexactas) tardando cada átomo una milésima de segundo para luego seguir con una siguiente clave, necesitaríamos 10^19 años.

Los "límites de la fuerza bruta" es un tema bastante interesante, y lo entrecomillo porque en verdad esto es una información sacada de: http://www.kriptopolis.com/los-limites-de-la-fuerza-bruta
Recomiendo leer el artículo, que es bastante corto, tiene el típico toque humorístico y aporta datos que si bien vas a usar poco, resultan muy curiosos y fascinantes.
¿Sabías que si te lanzas contra un muro hay un 2^-100 de probabilidad de que ninguno de los átomos (nuestros y del muro) no colisionen? Supongo que esto dependerá de la densidad del muro y la nuestra, y por tanto de la cantidad de átomos que pueden colisionar, pero no deja de ser una cifra aproximada que recuerda que existe dicha posibilidad.
Y en verdad, siempre existe la probabilidad de encontrar la llave de un hash con apenas calcular una clave, y en eso coincide cualquier máquina, puede ser de la NSA o un procesador 8080.

"Todos somos iguales ante los ojos de la probabilidad"

Madre, cómo se me va la pinza en algunas ocasiones, debo de tener déficit de atención XD.
44  Seguridad Informática / Criptografía / Re: [Consulta] ¿Tipos de cifrados más seguros que MD5? en: 30 Agosto 2015, 13:47 pm
El MD5 se considera hoy en día critpográficamente roto, no se debe seguir usando. SHA-1 todavía no está del todo rota, no se ha demostrado en la práctica, solo teóricamente, aún así, sigue siendo totalmente desaconsejable usarlo.
El mínimo sería SHA-256, sin embargo con los avances en velocidad de cálculo, tampoco se recomienda, para tener la máxima seguridad: SHA-512. Otros algoritmos son BLAKE-512, WHIRLPOOL y el nuevo SHA-3, todos ellos recomendables.

El cifrado del César no se debe usar, tampoco, de todas formas, son dos tipos de cifrados distintos. Existen tres tipos de cifrado. Simétrico, asimétrico y de hash (que no sé si puede considerarse cifrado, pues no suele usar clave a no ser que sea de MAC).
En el simétrico cifras y descifras con la misma clave, un ejemplo es el del César, que es enormemente inseguro, uno seguro es el AES (Rijndael), el estándar del gobierno estadounidense para cifrado de informacion clasificada como Secret y Top secret, también está el DES, predecesor de AES, que también se considera inseguro, es preferible la variante que hicieron más adelante, el 3DES, pero sigue siendo notablemente más seguro el AES; en el asimétrico cada parte comunicada consta de dos claves, una pública que distribuye, y una privada que guarda de manera segura, cuando alguien desea enviarle un mensaje lo cifra con la clave pública, cuando el receptor recibe el mensaje cifrado lo descifra con su clave privada, el algoritmo más usado y seguro es RSA, otro sería ElGamal, un protocolo ampliamente usado que permite compatibilidad entre los distintos algoritmos es PGP (patentado en EEUU), o GPG (el mismo pero software libre); por último, las de hash, estas son unidireccionales, es decir, permiten cifrar, pero no puedes descifrarlo -al menos de manera matemática o algorítmica-, tienen el efecto avalancha consistente en la gran diferencia de salidas entre entradas con diferencias de apenas 1 bit, son deterministas, es decir, una entrada siempre tendrá la misma salida en el mismo algoritmo, y su salida es de longitud fija, es decir, dando igual la longitud de la entrada, la salida siempre medirá lo mismo, por ejemplo, MD5 tiene una longitud de 128 bits, aunque le metamos un libro entero, la salida medirá 128 bits. Los algoritmos que te indicaba al comienzo del texto son de hash.
Las de hash se utilizan para verificar la integridad de un mensaje o archivo, así para almacenar contraseñas, por ejemplo, google no guarda tu contraseña en texto plano, sino que lo cifra mediante una función hash, cuando te loggeas cifra la contraseña que le entregas y compara el nuevo hash y el que tenía guardado.

¿Alguien podría resolverme la duda de si a una función hash se la puede considerar cifrado? Gracias de antebrazo ;)
45  Seguridad Informática / Criptografía / Re: Ayuda para descifrar una contraseña en: 30 Agosto 2015, 12:59 pm
Como ya dice engel lex, a la cabeza indica que es SHA. El formato me recuerda mucho al de los archivos .htpasswd de Apache, lo que me llama la atención es que guarda más datos, entre otros una IP y un correo electrónico.
Después de indicar el algoritmo se ve un segundo dato, que supongo que será la sal criptográfica usada. A continuación viene lo que reconzco como un hash SHA-256 en toda regla, pues tiene una longitud de 32 bytes (256 bits) en hexadecimal.
Imagino que el resto de parámetros indicarán datos como la fecha de creación de la contraseña, su caducidad y datos sobre el usuario (como su IP: 37.187.27.144 y su correo, your@email.com, que tiene la pinta de ser el valor predeterminado del campo para email en el formulario de registro).
Como es una clave salada, olvídate de tablas rainbow.
SHA-256 se considera totalmente seguro frente al criptoanálisis, así que esa vía la vamos olvidando también.
Solo te queda la fuerza bruta y el ataque diccionario.
Veamos la fuerza bruta. Teniendo en cuenta que más o menos la mitad de las claves a nivel global son de 6 caracteres de longitud, esta no se alejará demasiado, imagino que será de como mucho 10. Así pues la cantidad de posibles combinaciones usando A-Z, a-z,  0-9 y =-_.,;: (79 posibles caracteres) son 79^10,
lo que viene siendo 9468276082626847201.
Según las estadísticas, hace falta calcular alrededor del 50% de las posibles claves para hallarla, así que ahora tenemos "solo" 4734138041313423601.
Yendo a 500000 claves por segundo tardarías 300237 años...
Mmmnop, no merece la pena.

Solo te queda confiar en que no era demasiado creativo el propietario de la contraseña y usar un diccionario:
http://www.blackploit.com/2011/02/diccionarios-para-fuerza-bruta.html

Aclaro, el hash sin la basura de alrededor es:
c08b7dfe8b58eb2506c3e4fa7884e961110ec9c853c6d8a24a77e8d566219d98
La sal:
bb2ef3b3167176f3

Edito:
No he especificado un programa que permita usar diccionarios y sal:
SHA256 Salted Hash Kracker
Cuidado con la publicidad!!!
Puede detectarlo el antivirus, por dos motivos, porque el instalador te intentará instalar AdWare, o por se material de hacking/cracking. Doy fe de que no tiene ningún virus, salvo el AdWare del instalador, tú solo presta atención a lo que te dice y ya.
46  Seguridad Informática / Hacking / Re: crear archivo .bat para crear clave HKLM en: 29 Agosto 2015, 15:36 pm
Tienes un espacio en "Policies".
Copia y pega esto:
reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
A mí personalmente me funciona.
47  Seguridad Informática / Seguridad / Re: DUDA: Escanear vulnerabilidades de equipo de red local diferente a la mia en: 27 Agosto 2015, 15:09 pm
En verdad tienen razón, si preguntas eso no puedes haber hecho eso sabiendo lo que hacías...
Desde una red no puedes acceder a otra. Es como si cada red fuese un portal, Internet la calle y cada equipo dentro de la red un piso. Tú puedes salir a la calle e ir al portal de tu amigo, cuya dirección sería la IP pública. Dentro del portal cada piso tiene su propia dirección, la IP privada, del mismo modo que en la vida real esta el 1roA, el 1roB, 1roC, 1roX, 2doA, 2doB, 2doC, 2doX, etc...
El portal sería el router, el cual a su vez también aparece como vivienda. Este puede tener lo que se llaman puertos abiertos, esto es, que la información que recibe por ese puerto se lo enviará a una de las viviendas internas de su red. Mediante esos puertos podrías ver si el programa que se encuentra escuchando en la "vivienda" es vulnerable.
Otra posibilidad es que encuentres la forma de acceder al router, de este modo puedes realizar el ataque desde el router, pues como el router también es una vivienda, tiene acceso al resto de viviendas, como tú en tu red. El problema es que para ello tendrías que cargar los programas necesarios en el router y ejecutarlos en él, pero la mayor parte de los routes caseros son demasiado elementales como para soportar tales herramientas (están configurados para actuar como switch, es decir, que se puedan conectar varias máquinas a él; para actuar como módem, es decir, proporcionar acceso a Internet; y para actuar como router, que sirve para buscar una "ruta" hasta la máquina a la que se quieren conectar sus clientes a través de Internet o de una internet -con inicial minúscula- cualquiera), así que sería más sencillo abrir un puerto y realizar el ataque desde tu máquina a través de dicho puerto.

Yo que tú buscaría información sobre las redes y su funcionamiento, porque te ayudarán a avanzar como hacker. Aparte, pocas veces te van a dar la información tan masticada como te la he dado yo, para algo están Google o Duckduckgo.
Páginas: 1 2 3 4 [5]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines