Pregunta

¿Qué expresión regular puede usar I (si lo hay) para validar que una determinada cadena es una clave pública RSA ssh legal?

Sólo tiene que validar la clave real -. No me importa acerca de la clave escriba los precede o el comentario de nombre de usuario después de que

Lo ideal sería que alguien va a proporcionar también el código Python para ejecutar la validación de expresiones regulares.

Gracias.

¿Fue útil?

Solución

A "lo suficientemente bueno" cheque es para ver si las claves se inicia con la cabecera correcta.

La parte de datos del archivo de claves debe decodificar de base64, o se producirá un error con un base64.binascii.Error

desempaquetar los primeros 4 bytes (un int), que debe ser 7. Este es el longitud de la cadena siguiente (supongo que esto podría ser diferente, pero sólo está preocupado con ssh-RSA).

openssh_pubkey = open('keyfile').read()
type, key_string, comment = openssh_pubkey.split()
data = base64.decodestring(key_string)
int_len = 4
str_len = struct.unpack('>I', data[:int_len])[0] # this should return 7
data[int_len:int_len+str_len] == type

Como alternativa, podría renunciar a los controles binarios, y la mirada de AAAAB3NzaC1yc2EA en el inicio de una clave ssh-rsa, bit Me gustaría volver a verificar que es válido base 64.

[editar] Aclaración:
A través de la especificación, la primera parte si la clave es una cadena de longitud prefijada. La longitud se embala como un entero sin signo big-endian ( '> I' de una estructura pitón). Es un 7 aquí, porque la siguiente cadena, 'ssh-rsa', es de 7 bytes de longitud. data[4:11] es el próximo 7 bytes (por el prefijo de longitud), pero editado el código anterior para utilizar algunas variables descriptivas para tratar de hacer esto más claro. Si quieres ser exhaustiva, también debe comprobar para ssh-DSS, y posiblemente pgp-sign-RSA y PGP-sign-DSS, pero son mucho menos comunes.

Otros consejos

En base a las referencias al "tipo de clave que le precede" y "comentario nombre de usuario después de que", supongo que estamos hablando de claves públicas almacenadas en formato de archivo de claves ssh2.

En este formato, la clave se almacena en base 64 formato, por lo que una simple comprobación haría por objeto verificar que la cadena contiene caracteres base64 solamente válidos.

Si quieres ir un poco más lejos, se podía observar que los primeros bytes de la clave codificada especifican el tipo de clave, y hacer coincidir en eso. Ver este post , que dice:

  

Si base64 decodificar el primer bit de   ese texto (AAAAB3NzaC1yc2EA) se le   encontró que comienza con bytes 00 00   00 07 (indicando que una de 7 caracteres   cadena sigue) y luego los siete   personajes "ssh-rsa", que es la clave   tipo. Las claves DSA comienzan con el   cadena ligeramente diferente   `AAAAB3NzaC1kc3MA', que decodifica   de manera similar a la cadena "ssh-DSS".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top