Olá Habr!
Todos nós ouvimos muitas vezes palavras e frases como "criptografia de dados", "cifras secretas", "proteção criptográfica", "criptografia", mas nem todo mundo entende exatamente o que isso significa. Nesta postagem, entenderemos o que é criptografia e consideraremos as cifras elementares, para que mesmo as pessoas distantes da TI entendam a essência desse fenômeno.
Primeiro de tudo, vamos entender a terminologia.
Criptografia é uma transformação da mensagem original que não permitirá que todas as pessoas más leiam os dados se interceptarem essa mensagem. Essa transformação é feita usando algoritmos matemáticos e lógicos especiais, alguns dos quais consideraremos abaixo.
A mensagem original é, de fato, o que queremos criptografar. Um exemplo clássico é o texto.
Uma mensagem criptografada é uma mensagem que passou no processo de criptografia.
Uma cifra é o próprio algoritmo pelo qual convertemos a mensagem.
Uma chave é um componente com base no qual a criptografia ou descriptografia pode ser executada.
O alfabeto é uma lista de todos os caracteres possíveis na mensagem original e criptografada. Incluindo números, pontuação, espaços, minúsculas e maiúsculas, etc.
Agora que falamos mais ou menos a mesma língua, analisaremos cifras simples.
A cifra mais fácil. Sua essência é a recuperação do alfabeto.
Por exemplo, temos um alfabeto que é totalmente consistente com o alfabeto latino comum.
abcdefghijklmnopqrstu vwxyz
Para implementar a cifra Atbash, simplesmente a invertemos. "A" se tornará "Z", "B" se tornará "Y" e vice-versa. Na saída, temos a seguinte imagem:

E agora escrevemos a mensagem necessária no alfabeto fonte e no alfabeto cifrado
Artigo original: I love habr
Criptografado: r olev szyi
Aqui, mais um parâmetro é adicionado - uma chave primitiva na forma de um número de 1 a 25 (para o alfabeto latino). Na prática, a chave será de 4 a 10.
Mais uma vez, para maior clareza, pegue o alfabeto latino
abcdefghijklmnopqrstu vwxyz
E agora mova cada letra para a direita ou esquerda por um número-chave de valores.
Por exemplo, a chave será 4 e o deslocamento para a direita.
Alfabeto original: abcdefghijklmnopqrstu vwxyz
Criptografado: wxyzabcdefghijklmnopq rstuv
Estamos tentando escrever uma mensagem:
hello world
Criptografamos e obtemos o seguinte texto incoerente:
dahhk sknhz
A cifra baseada em binário mais simples que possui força criptográfica
absoluta . Sem o conhecimento da chave, é impossível descriptografá-la (comprovada por Claude Shannon).
O alfabeto original ainda é o mesmo latim.
A mensagem é dividida em caracteres separados e cada caractere é apresentado em formato binário.
Os clássicos de criptografia oferecem um
código bodo de cinco dígitos para cada letra. Vamos tentar mudar essa cifra para codificação em 8 bits / caractere usando o exemplo de uma tabela ASCII. Nós representamos cada letra na forma de um código binário.

Agora lembre-se do curso de eletrônica e do elemento XOR, também conhecido como XOR.
O XOR recebe sinais (0 ou 1 cada), executa uma operação lógica neles e fornece um sinal com base nos valores de entrada.
Se todos os sinais são iguais entre si (0-0 ou 1-1 ou 0-0-0, etc.), obtemos 0 na saída.
Se os sinais não forem iguais (0-1 ou 1-0 ou 1-0-0, etc.), a saída será 1.
Agora, para criptografar a mensagem, inseriremos o próprio texto para criptografia e uma chave do mesmo tamanho. Traduzimos cada letra em seu código binário e executamos a
chave XOR da mensagem de fórmula
Por exemplo:
Mensagem: LONDRES
chave: SYSTEM
Nós os traduzimos em código binário e executamos o XOR:
01001100 01001111 01001110 01000100 01001111 01001110 01010011 01011001 01010011 01010100 01000101 01001101 _______________________________________________________ 00011111 00010110 00011101 00010000 00001010 00000011
Neste exemplo em particular, no lugar dos caracteres resultantes, veremos apenas um lugar vazio, porque todos os caracteres estão nos 32 primeiros caracteres de serviço. No entanto, se traduzirmos o resultado em números, obteremos a seguinte imagem:
31 22 29 16 10 3.
Na aparência - um conjunto completamente incoerente de números, mas sabemos alguma coisa.
Código da palavra de código
O princípio de criptografia é quase o mesmo que a cifra de César. Somente nesse caso, alteramos o alfabeto não por um certo número de posições, mas por uma palavra-código.
Por exemplo, considere o alfabeto cirílico para alterar.
Nós vamos criar uma palavra de código. Por exemplo, Lukomorye. Remova todos os caracteres repetidos. Na saída, obtemos a palavra "Lukomrier".
Agora, inserimos essa palavra no início do alfabeto e deixamos os caracteres restantes inalterados.
E agora vamos gravar qualquer mensagem e criptografá-la.
" "
Temos o seguinte absurdo ilegível:
" "
A cifra clássica de Playfer assume uma matriz 5x5 baseada nos caracteres do alfabeto latino (i e j são escritos em uma célula), uma palavra de código e posterior manipulação deles.
Deixe a palavra de código ser "OLÁ!".
Primeiro, agimos como na cifra anterior, ou seja, remova as repetições e escreva a palavra no início do alfabeto.

Agora pegue qualquer mensagem. Por exemplo, "EU AMO HABR E GITHUB".
Dividimos em bigrams, ou seja, em pares de caracteres, sem incluir espaços.
IL OV EH AB RA ND GI TH UB.
Se a mensagem fosse de um número ímpar de caracteres ou se houvesse dois caracteres idênticos no bigram (LL, por exemplo), o símbolo X será substituído pelo caractere ausente ou repetido.
A criptografia é realizada de acordo com várias regras simples:
1) Se os caracteres do digram estiverem na matriz na mesma linha - nós os deslocamos para a direita em uma posição. Se o símbolo foi o último consecutivo - ele se torna o primeiro.
Por exemplo, EH se torna LE.

2) Se os caracteres do digram estiverem na mesma coluna, eles serão deslocados uma posição para baixo. Se o caractere estava na parte inferior da coluna, ele assumirá o valor do topo.
Por exemplo, se tivéssemos um bigram LX, ele se tornaria DL.
3) Se os caracteres não estiverem em nenhuma linha ou coluna, criamos um retângulo, onde nossos caracteres são as bordas da diagonal. E troque os cantos.
Por exemplo, o bigram RA.


De acordo com essas regras, criptografamos a mensagem inteira.
IL OV EH AB RA ND GI TH UB. KO HY LE HG EU MF BP QO QG
Se você remover os espaços, receberemos a seguinte mensagem criptografada:
KOHYLEHGEUMFBPQOQG
Parabéns Depois de ler este artigo, você compreende pelo menos aproximadamente o que é criptografia e sabe como usar algumas cifras primitivas e pode começar a estudar alguns exemplos mais complexos de cifras, sobre as quais falaremos mais adiante.
Obrigado pela atenção.