Protexer criptograficamente un arquivo entre varias persoas, grazas ao esquema de Shamir

Say Nothing“, de Patrick Radden Keefe (editada en portugués como “Não diga nada”, e en castelán como “No digas nada”) é unha apaixonante novela xornalística sobre o conflito do Norte de Irlanda. Narra feitos reais, e constrúese por volta dun grave erro na protección xornalística de fontes.

Entre 2000 e 2006, o Boston College comezou a realizar e arquivar unha serie de entrevistas sobre o conflito, denominado Proxecto Belfast. O obxectivo era documentar mais de tres décadas de violencia entre republicanos e británicos, e para iso realizáronse unhas 50 entrevistas a algúns dos principais protagonistas: combatentes de ambos os dous bandos, que relataron e confesaron a sua participación na guerra civil sobre un acordo de confidencialidade cos xornalistas do Boston College. O acordo estipulaba que a existencia do proxecto e o contido das entrevistas non se farían públicos ate despois da morte das fontes, e que durante ese tempo serían custodiadas con seguranza pola institución que patrocinaba a investigación.

Porén, todo se torceu. A existencia destas confesións filtrouse aos poucos anos de realizarse, e as autoridades británcias obrigaron o Boston College a entregar as gravacións existentes á Xustiza. Os investigadores non puideron nen souberon protexer as suas fontes, e estas viron traizoada a súa confianza e violado o acordo de confidencialidade sobre o que aceitaran participar no proxecto. O libro de Radden Keefe constrúese, de feito, sobre as revelacións que nesas conversas se fixeron sobre unha acción do IRA.

A protección de fontes xornalísticas

A protección das fontes é un deber deontolóxico fundamental do/a xornalista de investigación. A criptografía ofrece unha poderosísima ferramenta para poder cumprir con el, dado que, mesmo en caso de asalto a un arquivo ou imposición legal de entregar a documentación, o atacante non podería acceder a un contido cifrado se non posúen as chaves. O primeiro erro do Boston College foi ese: non protexer criptograficamente os arquivos que custodiaba. Pero se as gravacións do Proxecto Belfast tivesen estado cifradas, e o propio Boston College tivese as chaves para descifrar os arquivos, os responsábeis da institución poderían ser igualmente forzados a entregalas.

Ademais, na novela de Keefe dase a entender que o único problema non foi a incautación dos arquivos por parte da Xustiza. Se a policía británcia tivo coñecemento da existencia do Proxecto Belfast, foi porque un dos xornalistas fixo pública a entrevista con un dos participantes unha vez este morreu. Mais a maioría dos participantes entenderan que nada sería feito público (que non se sabería da existencia dunh arquivo de gravacións de paramilitares implicados en causas non prescritas) ate depsois do falecemento de todos os participantes. Houbo unha discrepancia de criterios que non tería protexido as fontes se só unha das partes -o Boston College- tivese custodiado as chaves criptográficas.

No caso que nos ocupa, sería de grande utilidade dispor dun sistema que permita protexer de maneira segura arquivos dixitais (gravacións, imaxes, documentos…), e que exixa para o seu descifrado o acordo entre as duas partes envolvidas: xornalista e fonte. Por sorte, este sistema existe desde 1979!

Protección dun segredo con varias chaves

A protección dun segredo con un número determinado de chaves pode resultar familiar a quen coñeza as carteiras multisig de bitcoin. De maneira parecida a eses filmes bélicos nos que o botón nuclear aparece protexido por mais dunha chave (para que un só comandante non teña o poder de lanzar a bomba atómica), bitcoin ofrece a posibilidade de protexer o envío de fondos con varias chaves, exixindo para facelo un número predeterminado delas (2 de 3, 4 de 6, 3 de 5…). Pois ben: é posíbel facer o mesmo non só con unha chave privada de bitcoin, senon con calquera segredo transformábel en texto.

O Esquema de Shamir, ideado por Adi Shamir en 1979, é un método criptográfico que permite dividir un segredo en varias partes distribuídas entre distintos participantes. Baseado na interpolación de polinomios sobre campos finitos, garantiza que só a combinación dun número mínimo de partes permita reconstruír o segredo orixinal, mentres calquera conxunto insuficiente de partes non aporta información ningunha sobre el. Este esquema é ideal para protexer claves ou datos sensíbeis ante perdas ou faltas de confianza, pois tolera a indispoñibilidade dalgúns custodios sen comprometer a seguridade global, ao mesmo tempo que exixe a presenza dun número mínimo deles para revelar o segredo.

No caso co que abrimos este artigo, un xornalista e a sua fonte poderían convir en conservar todas as gravacións ou probas nun volume cifrado con VeraCrypt (do que, ademais, cumpriría ter varias copias de seguridade). Para descifrar o volume, sería definida unha seña longa e imposíbel de memorizar, por exemplo: dmrtetepiomFdf gde059649323 53486hafnworit h393nfgnwo eoi34o9mM JHYSLoien xdsed2oi349mv. A continuación, esa seña sería repartida mediante o protocolo de Shamir nun esquema 2/2: en dúas claves diferentes, as duas necesarias para recompor o segredo orixinal.

En Linux, temos unha implementación simple deste esquema nunha ferramenta chamada ssss. O programa conta con dous comandos básicos: ssss-split crea un número de chaves para un determinado secreto, e establece cuantas delas serán necesarias para recuperalo. No exemplo sobre o que estamos a traballar quereríamos facer duas chaves e que as duas sexan imprescindíbeis, polo que estableceremos “2” tanto no parámetro -t (cantidade mínima de chaves necesaria para reconstruir o segredo) como no parámetro -n (número total de chaves que se crearán):

ssss-split -t 2 -n 2

A continuación, o programa solicitará que introduzamos o segredo que queremos cifrar e repartir, nun formato de ate 128 caracteres ASCII. No noso exemplo introduciremos a seña que protexe o volume de VeraCrypt, ou sexa “dmrtetepiomFdf gde059649323 53486hafnworit h393nfgnwo eoi34o9mM JHYSLoien xdsed2oi349mv“.

Na imaxe non aparece o segredo introducido, pero sí as chaves xeradas utilizando o esquema de Shamir. Serían:

1-f929804a3e0c3bd1184725a36bf353988409130d22e11a38c7041053f4ff0f6342af4b39a59e17a1a5a0c63892d53ad846f723bedb7d6bd0f64f88e5152baa7eb5a735a5a2f19119f4646b18103db830074314c6faabd3
2-1c06a109ed44297ff8a620753f489f41ad57df6a4f3c75b222f8b53c5c1e5675dc64c59ba5d9eee3cb21c537f6d352120add292eda219818b787513bccec2170969880b29543887ec05046b59d03d46c3c6beac5ff0bed

Unha desas dúas claves sería para o xornalista, e a outra para a fonte. Con só unha delas non se podería recompór o segredo, polo que cada unha das partes poderían entregar copias da sua chave a outras persoas de confianza, co obxectivo de ter unha copia de seguridade.
No momento en que se quixese acceder ao contido do volume cifrado de VeraCrypt faría falta recompór a seña de descifrado. Para iso, faría falta utilizar o comando ssss-combine e introducir ambas as dúas chaves. Como o segredo necesita de dúas chaves (neste caso, todas as que existen!) para ser descuberto, o comando exacto sería:

ssss-combine -t 2

Non é necesario introducir as chaves por orden, pero sí saber que o número que encabeza cada unha fai parte da chave, polo que debe ser introducido tamén. Unha vez feito, o segredo será recuperado:

Scroll ao inicio