Estou tentando entender melhor como funcionam as chaves públicas / privadas. Entendo que um remetente pode adicionar uma assinatura digital a um documento usando sua chave privada para obter essencialmente um hash do documento, mas o que não entendo é como a chave pública pode ser usada para verificar essa assinatura.
Meu entendimento era que as chaves públicas criptografam, as chaves privadas descriptografam ... alguém pode me ajudar a entender?
digital-signature
public-key-encryption
private-key
public-key
pki
jcampos8782
fonte
fonte
Respostas:
Sua compreensão de "criptografia de chaves públicas, descriptografia de chaves privadas" está correta ... para dados / mensagem ENCRYPTION. Para assinaturas digitais, é o contrário. Com uma assinatura digital, você está tentando provar que o documento assinado por você veio de você. Para fazer isso, você precisa usar algo que apenas você tem: sua chave privada.
Uma assinatura digital em sua descrição mais simples é um hash (SHA1, MD5 etc.) dos dados (arquivo, mensagem etc.) que são subsequentemente criptografados com a chave privada do assinante. Como isso é algo que apenas o assinante tem (ou deveria ter) e é daí que a confiança vem. TODOS têm (ou deveriam ter) acesso à chave pública do assinante.
Portanto, para validar uma assinatura digital, o destinatário
Se eles corresponderem, a assinatura é considerada válida. Se eles não corresponderem, significa que uma chave diferente foi usada para assiná-lo ou que os dados foram alterados (intencionalmente ou não).
Espero que ajude!
fonte
As teclas funcionam inversamente:
Abaixo está um exemplo de script para testar todo esse fluxo
openssl
.Este script gera o seguinte:
fonte
A chave pública criptografa e somente a chave privada pode descriptografá-la, e o inverso é verdadeiro. Ambos criptografam em hashes diferentes, mas cada chave pode descriptografar a criptografia da outra.
Existem algumas maneiras diferentes de verificar se uma mensagem veio de algum remetente esperado. Por exemplo:
O remetente envia:
A mensagem
O hash da mensagem criptografada com sua chave privada
O receptor:
Se não forem idênticas, significa que a mensagem foi adulterada ou assinada com outra chave e não a que pensávamos ...
Outro exemplo seria o remetente usar um hash comum que o destinatário talvez também saiba usar. Por exemplo:
O remetente envia:
O receptor:
Isso novamente garante que a mensagem não foi violada e é do remetente esperado.
fonte
Se eu tivesse que refazer sua pergunta de como eu a entendo, você está fazendo o seguinte:
Outras respostas já explicou como assimétricas meio de criptografia que você pode tanto :
Nós sabemos que tanto o exemplo # 1 e # 2 trabalho. O exemplo 1 faz sentido intuitivo, enquanto o exemplo 2 implora a pergunta original .
Acontece que a criptografia de curva elíptica (também chamada de "multiplicação de curva elíptica") é a resposta para a pergunta original. A criptografia de curva elíptica é a relação matemática que possibilita as seguintes condições:
Para a maioria, as condições 1 e 2 fazem sentido, mas e a 3?
Você tem duas opções aqui:
Em conclusão, um par de chaves público / privado é criado usando criptografia de curva elíptica, que por natureza cria uma chave pública e privada que são matematicamente vinculadas em ambas as direções, mas não derivadas matematicamente em ambas as direções . É isso que possibilita o uso da chave pública de alguém para verificar se eles assinaram uma mensagem específica, sem que eles exponham sua chave privada para você.
fonte
Pensei em fornecer uma explicação suplementar para quem procura algo mais intuitivamente revelador.
Uma grande parte dessa confusão surge do nome de 'chaves públicas' e 'chaves privadas', como tal, porque o modo como essas coisas realmente funcionam está diretamente em desacordo com o modo como uma 'chave' é entendida.
Veja a criptografia, por exemplo. Pode-se pensar assim:
Isso permite que mensagens secretas sejam enviadas entre as partes, mas do ponto de vista intuitivo aqui, 'bloqueio público' é um nome mais adequado do que 'chave pública'.
No entanto, para enviar assinaturas digitais, as funções são um pouco invertidas:
Então, quando o destinatário receber a mensagem, eles poderão lê-la e, em seguida, usar a chave pública para desbloquear a mensagem bloqueada e comparar as duas mensagens. Se as mensagens forem as mesmas, eles saberão que:
A mensagem desbloqueada não foi adulterada durante a viagem e,
A mensagem deve ter sido da pessoa que possui o bloqueio correspondente à sua chave pública.
E, finalmente, todo esse sistema funciona apenas se alguém que deseja validar a assinatura de um assinante tem um local autorizado para obter a chave correspondente aos bloqueios do assinante. Caso contrário, qualquer um pode dizer "Ei, aqui está a chave para o bloqueio privado do tipo" e assim por diante ", enviar uma mensagem fingindo ser eles, mas bloqueá-la com o bloqueio privado, você executa todas as etapas acima e acredita que a mensagem deve realmente ser da pessoa que você pensou, mas você está enganado porque se enganou quanto ao verdadeiro proprietário de uma chave pública.
Desde que haja uma fonte confiável para recuperar a chave pública de um assinante, você saberá quem é o proprietário legítimo de uma chave pública e poderá validar sua assinatura.
fonte
Para sua pergunta - eu estava analisando a implementação do RSA. E obteve mais clareza sobre como uma chave pública é usada para verificar a assinatura usando uma chave privada. Sem dúvida, a chave privada não está exposta. Aqui está como...
O truque aqui é ocultar a chave privada dentro de uma função. Nesse caso,
(p-1)*(q-1).
Considere p como a chave privada ee como a chave pública. 'p' é encapsulado em outra função para torná-lo oculto.
Dados enviados = [criptografado (hash), mensagem] = [m ^ d, mensagem]; onde m é a mensagem Suponha 'Dados enviados' = y Para verificar a integridade, encontramos y ^ e para obter m. Desde então
m ^(d*e) = m ^1 = m
.Espero que isto ajude! :)
fonte