Clave pública PGP, dirección de Bitcoin asociadas a éste blog y pequeño tutorial de OpenKeyChain

Con la última actualización del blog me he tomado la libertad de poder asegurar que ciertos contenidos aquí mostrados llegan íntegros a los lectores. Con los datos aquí presentes se puede verificar todo aquello que esté firmado por la clave privada del blog. Es decir, disclaimer:

Éste blog certifica que los contenidos firmados con la clave pública aquí mostrada han sido generados por los colaboradores del mismo. Salvo que algún colaborador con acceso al mismo haya sido secuestrado, haya sido obligado a firmar contenidos contra su voluntad, ya sea bajo coacción o por imperativo legal, o la clave privada del blog haya sido sustraída de los dispositivos que la mantienen a recaudo de posibles ladrones o atacantes y la contraseña que la protege haya sido averiguada.
Dicho esto, ésta es la huella digital de la clave pública:

0204c10ef67c9d5e42df8d77bfb967537dfb7a22

Los detalles de la clave pública se pueden leer en el servidor PGP del MIT. La clave pública se puede descargar de aquí. Para más paz mental, dejo aquí el texto pegado:
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQGNBFnYJPgBDACc3070w8U56Qrb+cr5ZrckIAl3+bi3Z/dZwTgQxdA9ZFyIdaLO
GveLH7PzgqhS01eeSdkYZU24Qgm01vp9mDQ0Ke85uG83VQhdmayoJwhVHjrnrD+l
67IaS83AP7hVA/peYiPl2cJzX3h+zMuCrgBNvWgxtsVg1iosRv1kHVIDHEDWOvBN
pcpuGUZrz4Qyxsw6ZCFYwRXmJsMeQx6x1GXu1UnZNoBHRViu7P71pIXZq53Ksrij
X2Fhk2OjSjaGstLME0DfYtCMbSLFgFQUvst3a9OZ1MXtateFwWe/xDfV39r1TzUV
X/Vkcmsf4nO0X9sei/h4KkAZLfPJbnjEI8AzpSQBHI+Hbi0jFaeyKyRzyFfcRv49
haDZX9WVOFD+ycdZlVCjojhC0orAZYhpgK53YpU/ja8ZeFxQ2QAruofOrlWEjXGS
ziPFvGgDuA56+bxdmxIcuNqiPDNZQ2k9aBy6D8e5SEcn9PDU0APpL6DzinzKYCR3
u6QNeSToxh7447cAEQEAAbQqQWd1YXNNZW5vcmVzIDxhZ3Vhc21lbm9yZXNAcHJv
dG9ubWFpbC5jb20+iQG2BBMBCgAgBAsJCAcCFQoCFgECGQEFglnYJeoCngECmwEF
iQWmWnsACgkQv7lnU337eiJ0Ngv8DvZaBNqzK9f6+xmogG4jEaJa1WQBEdu6c87Z
UGCjwDq22PFcCsKmkll02onyIbmVI9SGuG/dK/gGWspNnPCGXSONVxZM63dT2tdS
ZCyqQYKUJYWxOrfQLa9jl0oVvunPpnraN4OP+xvbxN7IQJGYD56Cn3LmekhtpxTi
Aj77de7zmIl3QB7utQPVZhIv1OW4xD8SvDgake5D2WsjnYz0rcvw5+XmgQluTkXc
Lyu2cHm37OHZuecxK6E1mOx4tSv9pIJZTXVwX2krZao4raelS51IvIEGDU5H5oTz
EAxD+1+JuOk+SPbTaKaq2wsDr2jIdz7zqGX7VAG2RnvqOeNt0tFhOnAosAlETOIh
oJX4mCXh8tmWZQP0GDdLomPkm3Dd+3fuy4/FKqdK4bDjBHSo8tyHIObn+gAfrbiw
K7gPg7m5gkk28F3qdx/T96GcJt2dlqGuC1PpZVKnubxYMLvPHjjs4se5B48JzJc6
zRtL0PUQBFO70ySQSFnA3uX/fN9uuQGNBFnYJPgBDADK1EoTx/vw6wv4pAkhl4eu
IoME0at/Xq4ITqER0ZrZ/+XE9+L1ZdOl/8Vv3lXDSoV4gYJNs2AXl60P7bNTZfaE
e7T5czN1w7WBvfQTpCcUE2xLwLp7rbTmc8jYpZoBB49JbBozOjWo4FXP8hmKijXo
/WvWnqaXW+4cl3NHZAcbNea+bFM/IXExcyv/dAOfD2t0K4X/cWSeM9VxSz18aldY
1/1TcqsAPspFCjuocaPmdofTA8jhawc6D/QQupSUoSGtl1wFW+/Ko1aifwA7iI+4
+HzVg8H4CpSIyOTn74I9KdM8sT08JT8M4azQQGu+WYk0/JRtDVGNFFjTNZNGP86O
B+ZLjA+kZqtTNQwVNqNe36BGQUFYN5zvsgimF6Pr35uONiniI2yL2wSRgDAOOUNo
w6E/LKfJ3JZxCOWzmy/4fzpZE6fUNlJmZ4F0OJVj8n9kKwIu+GJ3Rn3E8WljDn4/
pXxFB7KXKNJOSZumPLmT9dqa9uMGGFuaFynygXaKWukAEQEAAYkDRAQYAQoADwWC
Wdgl6gKbAgWJBaZahAGpCRC/uWdTfft6IsDdoAQZAQoABgUCWdgl6gAKCRD9Xb3x
u7L31GuwC/9rf5dJWFwUFx7u8ncPopcgSNAsElhnPSDkCkjZt1WwX7cxXcWLV+YH
oaNsnvxukXinh3P8lvfHDn19cJIwMb3M1fJHtMRPllLMlH7LrrKy7gZ8Un9wtnjT
cOeqrZfxfSO+OJ4zdFUp843JZRwIgVwKMVw2xnyUOugotIZhGy996ie50i3e1eE8
8CQsunqa+MNEfFx2yRMoiWaisJC6CLzUCLVvJlECvwxnO5tXFwtn574xOw2hBsJw
wJD46eQWfogq1V7F5bix9NLLsiO6ZvSZqjseFT0K6Dxd/prhp4S0V4WbGEJVENu5
wRTE+6kp5an8msWJkZNVmWQg+BnhRBCivohujdMbWSVTYMhlM54u3a7p1kGUeZhQ
nBCx1TvdhSFwmh4INfoIN2yQRcCPmvmG7FWRzK6BI8mSH2b5ipKCAwij5RbK1bu8
GYucF9qyzz36lybkiSWII5AALD1hlS3yht2S9M+VmxClY3tBuL0judu2QzMCNBXb
iKimgbsN6+xvnAwAigfqDGXuoIVB9ZEAO/7sT2esO+g51J8Xpk+34AUj5/Br5XQ8
VwGuinXiTkzrAN2901RHhZ4c2pESBRl8SGURcbxJvETVznL8ZR0ZPRJ3JS92Ryky
9So0BmkP1dDNZzrDbQSRAhOa2J2Iuy0d+9imVfav2zI4+FkqRcZIC3h6+jNlvezR
QMA6eNeFWspg6g2uQ8P8XhO/FBC2b9YTA0iXw3meLEE49pJpfbh0Aj/NFRevkYcq
F7oYZGLskMtRvQGA/dW88IMrzjBjVk7dHAi1atRYLnmgbop/px+/OZpyQxY52OvQ
NJRkKOjFAaBsaIV2Ok8UKhdS+ns3f1z3wfpjK8mAFfJJqRGZdEftFROZomg6d6lB
Bw+DPNeogkbrjoQjt9KgK7sPmO4q/lFrmUTON9fFHZ31RjKzGKUF/gZfLU+C8TFh
+RA4tOHWfKFyR+/Mht2OAM30/AePNj0hL/HS6RfqVNx/NerF64VyU6rzH1BM4Wit
yHfh5w8733ZWipbauQGNBFnYJPgBDACUv9GZWTUvOMhA/bztBWsHdSJFeyxZtcVI
lkQ+BLeAMrnnnz3yg/HIMJw2M8iNihmD2QVIuPLqIi5qNngm4zIR1It1gAg5nUb6
Yot77ReHsbItzUkcwu+efvI/2h2Knm4+HOjiR0mD2gFp2Wai9RAzOZCtWrPu4rNU
XZ5TqFhufZRP084tx2S/AgNJFRyvc+eBQRFumN+cqUjlvcSaClcifNeR8a4rtoc7
8ek8Y1/JxPG7aPECOIhR5s0cePuRO2j42erdJcHL3sycY01oV63uX3U9FhwjT9FP
nBfj4uJLWVOg+n4GogUogJSq9TIrRChWw7JBvjwGyu+6PZeVtu3sDHU/hFqXb6Sc
/gCM/GS7yiU2LptWBs4CQhc8GRKqXlfT6YwnKU/l7rlPUk1tjIMf4ELyKmq0pHz0
85U6MwWieuXVp+MHDEdIgaeENyp9MHEqG9+SymGGHI7iGK5wC3UPNOyNY/OJX5Q6
X4DuZmHyNSD6+rHWNS1qkqQJogOPBg8AEQEAAYkBpQQYAQoADwWCWdgl6gKbDAWJ
BaZajQAKCRC/uWdTfft6IgexC/40cUX5Wp7wLT9YvvDURzSrLlW4TBxZR4DbfIl3
LZWZoCujBF0oke/qQO5NtC4oBv4VWSuvDoh2hxIC7qns8JRFYNcIQ6+MEnE219dh
j82pkVuVEeZ+/dtS3s3cPCnCWpwlDar5nPCanP/2ddwrZ3OTToQW5a38+92yd33a
Z3gAErz9iF6D3XpRyWNbZdYc5u2eB2+tlNIn5fxrE6O+cleC9k5kgBpULyxc9ned
mvRNI4hpZCsVzveHzK92lK7+F6IeooJ8YGunoC8ux+unRpwq+RCXo72FjhyI8YOh
g7MPp2jYb50hKk9HpNSBNlW3JhQ3TVHW3a5ZrMKT596fVL1rmg609JJhWhRlrX/S
afq2Czx4xpVdMZi2wOfBWwsX734uHSCyRLGwLe1McMy7c8EvOBx1wszTqiwAadxP
f+c46cF6NtGrhs/3yHn97DOAsI+qRcvjGKhjY+qxTcubVHc4/6X4Z9GvfznLqVlY
gFRAcCfh9Z/Kk0pGbteMN7nRgbY=
=rXPr
-----END PGP PUBLIC KEY BLOCK-----

Nótese que el texto ASCII es distinto. Pero eso es porque el servidor de PGP utiliza un formato distinto para codificar la clave pública. En StackOverflow hay una pregunta al respecto con respuestas adecuadas. Lo importante es que la huella digital es la misma, por lo que los contenidos son los mismos.

Cuenta de Monero firmada:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

44VQYhdYdp3BKE3AhKd62bXWAVdLohxdb5hqg5eFsPvXeBQk8ZQayay3FgjCeURBZSNhsAhBPLrWfAx5k6XFGsAZ9tQcuLu
-----BEGIN PGP SIGNATURE-----

iQGcBAEBCAAGBQJaeK0FAAoJEP1dvfG7svfUqCcMAJr/K30HvLQm5sPREDLsV17Q
eSJ/gXEBsnwH9+TK3aX7yAYX7EXiDuk/mrR8HonvhetcL3n+mlYBc6ta7oVC02JT
qCK5nCPVFillT30kPEtUvXSpr9h1rW4ZOg46gKPpCUZPvT19M45ZoGrXxVNNBFuW
jW6r5k0OMkS/Y/2PREuKTJUvuy46rm8uyS96PD9LwjmuRjulZQE5pjvD3zyrUPzl
1sy+tN8ymBLn3OGoHbuV4MlY3maY09azejakOgBVQz+5NW2Z5lV/q7RbOVSovE/e
EA0+JPrFu/avFcqxLrjzpsqAgfFijAAjdwM5YZWqucHmhl9yP1yivm29HesK7YK3
Fol9gwOJ2tvapcM9jwbmOD4JRFhVu60OpDAYZkME/g6WnY14RZuPsdDuu5AYUXx1
/jgQX83/j9rsYVWfLYIjGTB2SpdR0bvZfklAzQXgHOaL3TsoI8S8fS0kmySCLRGL
0/IOVgWfKQpdV5wjQnevLbyNweeSoiFVJn1nyL3DUg==
=Ilum
-----END PGP SIGNATURE-----

Representación en forma de código QR de la firma anterior:


Finalmente, la cuenta de Bitcoin del blog debidamente firmada:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

1B5hwjS94327nNVw41gMAWK4NBNdBJwG5u 
-----BEGIN PGP SIGNATURE-----

iQHIBAEBCgAyKxxBZ3Vhc01lbm9yZXMgPGFndWFzbWVub3Jlc0Bwcm90b25tYWls
LmNvbT4FAlnYJ2QACgkQ/V298buy99TiyQwAgDEvSRjbIfD3L20yG6ZRfgUVQp3I
uKJ9XIJh5Q0cYFf3hV38wk9Yjk8b9bqL22XJVSwAn5nWRHyjyYB76J+WNh+XeH28
/IL+G/EMMC7wVO30vMrDhRCegQIqYUUxD4YE8g8P18QBcymyCGyvCp6Io8LMXPjN
lSb0xK+cYMRuuzOsxm9h/+ntKTWF6ankjr36iWQbowEvrWFPkD6Yd+4gXUpPaFDs
H1dndVZg4Euo7KqJYe+RjadUU3erjkEU5gMTplr8soZ7g1Gk6fFqW9CLJTwvYzO+
ZOKaS4vO4F3tw+zukE8/yFAEzoBmCec+xgIzwM37eHya2Cw12aAboV3wfMRA2I3x
5IUlL+n0k7hHX0YYZj9lV+EJMKw1JIo9Z0S2eZGP3aLYBbVcobfZOkOvHNNNB5Ak
qKh87ivdkc2mc6FFrs+jHXqAxGV1+Aqvp64jLMsDXz7Lyx6KiShxOFaluv/AZuMR
U11qK6kK06Em4iSr9Hv7nl/sz8xF3Ws0l8Oo
=DMhe
-----END PGP SIGNATURE-----

Representación en forma de código QR de la firma anterior:


No puedo generar un QR de la clave pública porque es demasiado texto (4073 Bytes, 32583 bits). La capacidad máxima de un código QR es de 23648 bits.

Esta es toda la información necesaria. Estas claves y la información firmada (en esta entrada concretamente la dirección de Bitcoin del blog) la podéis utilizar con OpenKeyChain para Android o Kleopatra para GNU/Linux.

También podría usar S/MIME y emplear Let's Encrypt para firmar mi clave privada y pública. Así los destinatarios que confíen en Let's Encrypt pueden confiar automáticamente en las claves que aquí pusiera. Es algo que he de estudiar si es como pienso que es, ya que en principio está pensado para correo electrónico.

El procedimiento para hacer uso de esto es importar clave del servidor del MIT y verificar archivos o texto copiado en portapapeles con vuestra aplicación favorita. Pasos con Android, usando Barcode Scanner y OpenKeyChain a continuación.

Importar clave pública mediante OpenKeyChain

Abrimos OpenKeyChain. Le damos al botón con símbolo «+». En el menú desplegable pulsamos en «Búsqueda de clave». También hay otras opciones como importar un archivo .asc o escanear un código QR.


Si busco mi clave, la encuentra y me indica si la quiero «refrescar» (actualizar) o ir a la lista de claves de OpenKeyChain (Ir a la clave)

Busquemos una que no sea la nuestra. Por ejemplo la de Linus Torvalds, coordinador del núcleo Linux. De entre la multitud de Linus Torvalds, hay uno que parece ser el que buscamos. Le damos a importar. Pero tiene un símbolo de prohibido.

El símbolo de prohibido significa que la clave pública que hemos importado ha sido revocada por la clave privada que Linus Torvalds posee. Si buscamos un poco en Internet, en la lista de correo de Linux se avisó de que esa clave es falsa. El problema radica en que si se utiliza un identificador más corto que la huella digital se pueden obtener identificadores cortos idénticos para claves públicas distintas. El único identificador válido para una clave es su huella digital. El intento de suplantación de identidad consistía en generar una huella cuyos últimos 4 bytes fueran idénticos. Una colisión de identificador corto. Buscamos otra clave a nombre de un Linus Torvalds y nos sale con un aspa o cruz. Significa que no es segura. Es fácilmente reproducible. Y permite descifrar fácilmente cualquier cosa enviada a ese Linus Torvalds sin necesidad de su clave privada.

Esta parece la buena. La importamos. Aparece en la lista de claves con un interrogante.

El interrogante significa que no hemos confirmado la clave importada. Confíamos en ella porque está colgada en el servidor de claves PGP, ¿verdad? :P

Esto es lo que permite la clave privada que se corresponde con la pública importada.

El aspa también sale si la clave pública caducó. Por ejemplo, la clave de Linus cuando éste estaba en Transmeta.


Volviendo al tema de la confirmación de la clave. Dado que no dispongo de ningún código QR que me haya pasado Linus personalmente, me tengo que conformar con hacer la comprobación de huella digital manualmente. Para ello pulso en el menú y le doy a Confirmar con huella digital. Consulto la huella digital en el servidor PGP donde se hospeda. Veo que la huella coincide. Y además la clave pública está (con)firmada por otras claves. Principalmente de desarrolladores del núcleo Linux.

Confirmar una clave significa firmarla. Así que la firmo pero dicha firma no la sincronizo con Internet. Un blog de chichinabo confirmando una clave pública de Linus Torvalds :P

La clave ya la he confirmado. Todo lo que Linus Torvalds firme con su clave privada puedo comprobar que lo haya firmado él. Suponiendo que su clave privada está a salvo. En la web de Linux hay instrucciones para verificar la firma del código fuente de Linux. Sección en el manual de GPG.

Los problemas de este proceso de confirmación residen en que OpenKeyChain puede estar infectado y hacer que una clave en concreto sea suplantada. PGP a diferencia de X.509 es un sistema de confianza plano. Es por ello que hay personas que organizan quedadas para (con)firmar sus claves en persona y fuera del alcance de Internet. X.509 es un sistema jerárquico. Es el empleado por navegadores o el DNI electrónico.
En cualquier caso, una clave de suplantación no tardaría en mostrarse como la clave falsa que es al querer utilizarla para verificar un archivo firmado por la clave privada correspondiente a la clave pública correcta. El malware no tiene capacidad de detectar cualquier archivo que se quiera verificar. No puede siempre suplantar la clave sólo cuando sea necesario.

Cómo verificar que un texto firmado ha sido firmado por quien se dice que ha sido firmado

Escanear el código QR de la dirección Bitcoin firmada

Seleccionar todo el texto (mantener pulsado, seleccionar todo) y darle a copiar

Abrir OpenKeyChain y usar el botón de menú «Cifrar/Descifrar»

En la siguiente pantalla le damos a leer del portapapeles

¡Tachán!, la dirección Bitcoin ha sido comprobada. A mi me dice que el texto ha sido firmado con mi clave (obviamente). En la misma ventana hay un botón para compartir el texto, por lo que la dirección de Bitcoin se puede pegar en la aplicación que uséis.

Es un poco farragoso, pero ningún documento que certifique cosas es sencillo de obtener ni trivial de verificar. La única pega es que la clave de este blog no está firmada por nadie más.

Comentaris