Muito bom, mas só um detalhe sobre o RSA. Foi dito que:
- chave pública, que é capaz apenas de encriptar.
- chave privada, que é capaz apenas de decriptar.
Na verdade, ambas as chaves servem para encriptar e decriptar (e o que é encriptado com uma, só pode ser decriptado por outra). O que muda é o propósito e a terminologia.
Quando usamos a chave pública para encriptar (que é o seu exemplo), quer dizer que somente quem possui a chave privada conseguirá decriptar. Isso garante que ninguém mais vai conseguir ler os dados.
Já o oposto não parece fazer sentido, afinal, se eu uso a chave privada para encriptar, qualquer um que possui a chave pública vai conseguir decriptar. Então pra que isso serviria? Bem, o propósito é de garantir a autenticidade dos dados. Por exemplo, se vc conseguiu usar a minha chave pública para decriptar, então os dados só podem ter sido encriptados pela minha chave privada. Ou seja, isso garante que fui eu quem encriptei aqueles dados (assumindo, claro, que ninguém teve acesso indevido à minha chave privada).
Essa é a ideia básica por trás da assinatura digital. A chave privada é usada para encriptar o hash de determinado conteúdo. Depois, qualquer um pode decriptar com a respectiva chave pública, garantindo que aquilo foi gerado pelo portador da chave privada (e calcula-se novamente o hash do conteúdo para verificar se é o mesmo - ou seja, garanto a autoria e integridade do conteúdo). Mais ainda, o dono da chave privada não pode alegar que não foi usada a chave dele (afinal, se conseguimos usar sua chave pública para decriptar, só pode ter sido encripado pela chave privada correspondente) - esta propriedade é chamada de "não-repúdio".
Neste caso, a terminologia diz que estamos assinando com a chave privada e verificando a assinatura com a chave pública. Por este motivo, a frase "encriptar com a chave privada" é considerada errada (embora tecnicamente esteja ocorrendo uma encriptação dos dados). Além disso, também é comum o uso de pares de chaves diferentes para encriptar e assinar.
Por fim, também vale mencionar que a criptografia assimétrica pode ser usada em conjunto com a simétrica. Por exemplo, o SSL/TLS faz isso: primeiro o cliente gera uma chave simétrica, que é encriptada com a chave pública do servidor e enviada para ele. O servidor decripta com sua chave privada, obtendo a chave simétrica, que é usada posteriormente para trocar mensagens com o cliente.
Inclusive, esta é uma forma de uso comum do RSA (transmitir uma chave simétrica), já que ele é considerado lento para encriptar/decriptar.
E como leitura adicional, seguem alguns links abaixo. Afinal, o assunto é amplo, eu mesmo reconheço que não sei nem 1% (e tudo que eu disse acima foi ultra-simplificado e tem vários poréns e detalhes que, apesar de saber que existem, ainda não conheço a fundo):