Uma das principais verdades da criptografia é que você não deve inventar nada nessa área se não for um profissional. Isso é parcialmente verdade, porque tudo de bom já foi inventado, sofrido e usado por décadas no campo da tecnologia da informação. O outro lado da verdade é que o desenvolvimento de um certo campo de conhecimento ocorre apenas com um fluxo constante de novas idéias e soluções originais.
Por razões óbvias, não vamos nos enganar com gigantes da criptografia industrial como a AES, mas mergulharemos, por assim dizer, em nossas próprias pesquisas criptográficas com blackjack e alegrias.
Em parte porque é interessante, em parte porque, ao modelar algo de sua preferência e compará-lo com padrões reconhecidos, você pode ver claramente o contraste, soluções eficazes e omissões francas, entende o que pode se esforçar para aumentar a eficiência.
Mas já bastante água.
Digamos que nosso aplicativo da Web seja escrito em php, precise de criptografia reversível e acreditemos que podemos escrever nosso próprio sistema de cifra.
Portanto, escreveremos nosso próprio sistema de criptografia reversível com uma chave pública e privada, que terá os seguintes recursos de um algoritmo criptográfico um pouco mais seguro:
- A presença de caracteres de ruído na cifra resultante.
- As informações em cada canal do Remetente-Destino serão criptografadas usando uma chave privada e a função de correspondência será exclusiva para cada chave.
- Cada mensagem receberá um código de compilação - um código exclusivo que é uma função da chave privada e da mensagem original. Isso é necessário para obter a exclusividade da função de correspondência “caractere de origem <=> caractere codificado” não apenas para o canal “Remetente-Destino”, mas também para cada mensagem individual.
Assim, mesmo se imaginarmos que a correspondência dos símbolos codificados e de origem para uma mensagem específica seja conhecida através do uso de análise criptográfica, por exemplo, análise de frequência, isso não dá nenhuma preferência ao examinar outra mensagem. - Para complicar a análise de frequência, codificaremos cada símbolo de mensagem de origem com dois símbolos de cifra.
Então o que aconteceu?
Na verdade, você pode ver o resultado final
aquiClasse SymCoderA classe SymCoder inclui métodos de criptografia e descriptografia.
A criptografia é realizada pelo método code (), que recebe a mensagem original na entrada.
Aqui, a mensagem na tabela de correspondência gerada em tab_coded cria uma mensagem criptografada, diluída nas bordas e no interior com símbolos de ruído.
Os símbolos de ruído, a propósito, são exclusivos para cada canal de destino do remetente, pois são gerados usando a tecla do canal, mas não são exclusivos das mensagens. Os caracteres usados para criptografia em code_symbols são alguns caracteres de pontuação e caracteres como%, @, etc.
Para cada caractere codificado, há dois caracteres de code_symbols por razões óbvias, que existem várias vezes menos deles que caracteres codificados.
A tabela correspondente create_tab_coded é criada usando a conversão do hash da chave da mensagem em uma matriz com o número de elementos igual ao número de elementos na matriz de caracteres do código. A posição do início do desvio de códigos de dois caracteres também é sempre diferente e está associada à tecla do canal. Isso torna possível garantir que o algoritmo para ignorar caracteres codificados e sua correspondência com caracteres de código sempre (bem ou com frequência garantida) sejam diferentes.
Por exemplo, a mensagem "olá mundo" sendo codificada é assim:
Digest-a00bf11d-&?==&!&?.@.@=!=-.?&1.#&?=:.:.1%!&-%@&@%~&1^#=?%%.!%+.?.~=?..&?%&&:%~.#%@&1&1.#=?.#.?.!&1==&=.-=!
E aqui está a mesma mensagem codificada novamente:
Digest-a00bf11d-=:.?=:&!.?.1&-=:=?.?.=.?.!&=%!=-%@=!%~.=^#.1%%.!%+=:.~.@..==%&&1%~.1%@=?.@.!&=.!&@=:&1.==:=!.1&:
Pode-se observar que o resumo da mesma mensagem é o mesmo, mas a cifra se torna diferente - os símbolos de ruído são adicionados por correspondência arbitrária e em ordem aleatória para cada nova criptografia.
As mensagens têm redundância, que diminui à medida que o volume da mensagem aumenta, atingindo até 10% de ruído (para as mensagens mais curtas, o ruído atinge 90% e acima da porcentagem), o tamanho mínimo de uma mensagem criptografada é de 116 caracteres. Uma das poucas desvantagens desse método de criptografia é o aumento duplicado das mensagens codificadas.
Decodificação é a tradução reversa do formulário “símbolo de código” - o símbolo original com o ruído cortado da mensagem. Qual poderia ser a chave? Em princípio, qualquer sequência que seja exclusiva para cada par do tipo destinatário-destino.
Por exemplo, se você criar um messenger com criptografia de mensagens, nesse caso, a versão mais simples da chave privada pode ser md5 ($ user_id_1. $ Salt. $ User_id_2), a chave será exclusiva para cada canal de mensagens.