Chave pública e chave privada.
A chave pública é usada pra codificar e a privada pra decodificar.
Assinaturas são feitas codificando (geral com hash) a mensagem com a chave privada, pra saber que ela é original do dono.
Versões em C e Python, ambas bem (mal) feitas.