criptografia / descriptografia com várias chaves

110

É possível criptografar dados, de modo que possam ser descriptografados com várias chaves diferentes?

Exemplo:

Eu criptografei os dados com a chave 1, mas quero poder descriptografar com as chaves 2, 3 e 4.

Isso é possível?

Glen Solsberry
fonte

Respostas:

170

GnuPG faz criptografia multi-chave padrão.

O comando a seguir criptografará doc.txtusando a chave pública para Alice e a chave pública para Bob. Alice pode descriptografar usando sua chave privada. Bob também pode descriptografar usando sua chave privada.

gpg --encrypt --recipient [email protected] \
    --recipient [email protected] doc.txt

Este recurso é detalhado na seção do guia do usuário intitulada " Criptografando e descriptografando documentos "

David Segonds
fonte
Idem. É legal saber como fazer isso, mas não consigo encontrar ocultar nenhuma página de manual nele.
MarkusQ
@Mitch, postei uma resposta que pode ter nossa resposta! (Por favor, teste e elogie se sim / não - MUITO apreciado!)
pythonlarry
@MarkusQ, veja meu link para Mitch, acima. Teste / obrigado se puder! :-)
pythonlarry
Portanto, isso resulta em 1 arquivo criptografado que pode ser lido usando qualquer uma das chaves privadas, não 1 arquivo por chave?
user8675309 01 de
7
@ user8675309, sim. Os dados são criptografados por uma chave simétrica comum. Apenas a chave simétrica é criptografada pela chave pública de cada destinatário. Não é recriptografar todos os dados de cada destinatário.
wisbucky
55

Sim é possivel

Sim, é possível criptografar vários destinatários. Também parece lógico, quando você acha que você pode querer ser capaz de ler o que você enviou para alguém e para isso você precisa estar na lista de destinatários.

Linha de comando

Veja como fazer isso por meio da gpglinha de comando (conforme descrito na resposta de David Segonds ):

gpg --encrypt \
  --recipient [email protected] \
  --recipient [email protected] \
clear-message.txt

Cliente GUI

Sua GUI deve fornecer uma maneira de criptografar para várias pessoas

Mecanismo

Há uma pergunta sobre Segurança da Informação , tamanho do arquivo GPG com vários destinatários? , que explicam o mecanismo de criptografia :

O GPG criptografa o arquivo uma vez com uma chave simétrica e, em seguida, coloca um cabeçalho identificando o par de chaves de destino e uma versão criptografada da chave simétrica.

[...] Quando criptografado para vários destinatários, esse cabeçalho é colocado várias vezes, fornecendo uma versão criptografada com exclusividade da mesma chave simétrica para cada destinatário .

Édouard Lopez
fonte
4
um agradecimento especial pelas duas últimas frases: eles deixaram tudo perfeitamente claro agora!
radistao 10/10/16
31

Os clientes GnuPG e PGP em geral geralmente criptografam os dados reais com uma chave simétrica chamada "chave de sessão". A chave de sessão é então criptografada com cada "chave de destinatário" (ou seja, aquelas que você especifica com -r / - destinatário). Isso às vezes é chamado de cifra híbrida . No momento, acredito que o GnuPG por padrão usa chaves de sessão de 256 bits e AES para criptografar os dados de texto simples para aquela chave de sessão AES-256, e as chaves do destinatário são RSA / DSA / ECDSA / etc. chave assimétrica neste caso.

Uma razão para fazer isso dessa forma é que algoritmos criptográficos simétricos como AES são geralmente muito mais rápidos do que algoritmos assimétricos como RSA. O GnuPG, portanto, só precisa criptografar ~ 256 bits (a chave de sessão) com RSA e pode usar AES para criptografar os dados (do tamanho que você quiser!) Com essa chave de sessão. As máquinas Intel até têm uma instrução embutida, AES-NI , para executar algumas etapas do algoritmo no hardware, o que torna o GnuPG extremamente ágil para criptografar / descriptografar dados.

Outra razão para fazer isso dessa maneira é que permite que documentos criptografados por PGP sejam criptografados para várias partes sem ter que dobrar o tamanho do documento. Observe que quando você especifica vários destinatários para um documento criptografado (por exemplogpg -ea -r Alice -r Bob -o ciphertext.asc ), o documento criptografado que é armazenado (ciphertext.asc) não é 2x tão grande como se você tivesse acabado de criptografar para Alice.

Veja também o --show-session-keyparâmetro na página do manual gpg para poder descriptografar apenas a chave de sessão, por exemplo, para permitir que terceiros descriptografem um documento criptografado para você sem ter que transferir para eles sua chave privada ou os dados de texto simples.

eu faço
fonte
1
Obrigado pela explicação sobre o documento criptografado não ser n vezes maior, onde n é o número de signatários.
theartofbeing
4

Sim é possivel. Para começar, "criptografia multipartidária" do Google.

AFAIK, não há pacotes drop 'em e uso' em para isso.

- MarkusQ

PS Para um esboço de como isso poderia ser feito, considere isto. A mensagem criptografada consiste em:

  • a carga, criptografada com um teclado único
  • o one time pad, criptografado com key1
  • o one time pad, criptografado com key2
  • ...
  • o one time pad, criptografado com keyN

O destinatário que possui a chave i apenas descriptografa sua cópia do bloco com a chave e, em seguida, descriptografa a carga útil.

No entanto, esta é apenas uma prova de que isso poderia ser feito e seria péssimo como uma implementação real. Se possível, você deve evitar lançar sua própria criptografia. Se você não entende o porquê, você definitivamente deveria evitar rolar sua própria criptografia.

----- Editar ------------

Se eu estiver errado e as ferramentas Gnu fizerem isso, use-as. Mas não consigo encontrar nenhuma informação sobre como fazer isso.

MarkusQ
fonte
1
O que pode ser uma merda nisso é que, uma vez que você conhece um bloco de tempo, você tem um texto simples conhecido, junto com os valores criptografados para outras chaves. Usando essas informações, você pode tornar mais fácil descobrir quais são as outras chaves.
Kibbee
2
Pesquisar "criptografia multipartidária" não dá muito resultado. Provavelmente, você terá mais sorte com a "criptografia de transmissão", que também abrange esse caso.
staktrace de
1
@Kibbee: As chaves não são secretas, são públicas. Portanto, tornar mais fácil descobrir o que eles são não importa. (Esses esquemas são usados ​​apenas com chaves que só podem ser usadas para criptografar, não descriptografar.)
David Schwartz,
5
Tenho certeza de que as implementações reais não usam um pad compartilhado de uso único (que precisaria ser tão grande quanto o texto simples e o texto criptografado, dobrando assim o tamanho da mensagem), mas na verdade usam uma chave de criptografia simétrica compartilhada (que geralmente é muito menor do que a mensagem).
Joachim Sauer
-16

Múltiplas (mais de duas) chaves RSA podem ser assim - bem, eu não sou um matemático, então este algoritmo não é necessariamente seguro, eu só quero dar uma ideia com ele.

m = p * q * r; p, q, r são grandes números primos

fi (m) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei são números arbitrários, d é calculado para cumprir a equação

y1 == x ^ e1 (mod m)

y2 == y1 ^ e2 (mod m)

y3 == y2 ^ e3 (mod m)

...

x == yi ^ d (mod m)

Este algoritmo pode ser usado, por exemplo, para aumentar a velocidade do Onion Router.

IQfighter
fonte