É 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?
É 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?
Respostas:
GnuPG faz criptografia multi-chave padrão.
O comando a seguir criptografará doc.txt
usando 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 alice@example.com \
--recipient bob@example.com doc.txt
Este recurso é detalhado na seção do guia do usuário intitulada " Criptografando e descriptografando documentos "
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.
Veja como fazer isso por meio da gpg
linha de comando (conforme descrito na resposta de David Segonds ):
gpg --encrypt \
--recipient alice@example.com \
--recipient bob@example.com \
clear-message.txt
Sua GUI deve fornecer uma maneira de criptografar para várias pessoas
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 .
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-key
parâ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.
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:
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.
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.