Como ocultar segredos em sequências de caracteres – Javascript

Como ocultar segredos em sequências de caracteres – Javascript

As vezes, o melhor esconderijo é o que está à vista.

Se você fosse um espião em um país hostil, apenas enviar uma mensagem para o Brasil seria incriminador. Se essa mensagem fosse criptografada, provavelmente seria muito mais incriminadora e as coisas só piorariam quando você, o espião, se recusasse a descriptografar a mensagem para as autoridades. Esteganografia, que literalmente significa “escrita oculta”, é sobre esconder a existência de uma mensagem.

Manto da invisibilidade

Você sabia que a citação esteganográfica acima tem um segredo oculto que é invisível? Você seria capaz de detectar sua existência se eu não tivesse mencionado? Confira o restante do artigo, e entenda melhor.

Caracteres invisíveis em Unicode

Caracteres de largura zero são caracteres não imprimíveis, e são parte da tabela Unicode. Como o nome sugere, eles nem mostram sua presença, são usado para permitir quebra automática de linhas em palavras longas, unir emojis, combinar dois caracteres em uma ligadura, impedir que eles se unam, etc.

Os caracteres zwj se juntam aos emoji, mas não são visíveis

Esses personagens cada vez mais se escondem no texto, sendo sua invisibilidade completa um ponto notável. Eles não podem ser bloqueados, pois são integrais em vários idiomas e emojis. E também acontece que os ZWCs não são os únicos caracteres invisíveis, por exemplo. Separador invisível – U + 2063.

A tabela que contém os principais caracteres invisíveis usados

Um pequeno problema com esta tabela! O Gmail bloqueia U + 200B (espaço com largura zero). Para não mencionar, o Twitter é conhecido por colocar na lista negra caracteres invisíveis desnecessários, nenhum dos caracteres da tabela, exceto U + 200C, U + 200D e U + 180e funciona. Então temos somente três caracteres!

Eita, espera ai, o U + 180e não é invisível e é renderizado de maneira estranha em dispositivos IOs. Agora reduzimos para apenas 2 caracteres.

Por isso, destruímos a tabela Unicode e começamos a testar cada caractere invisível possível quanto a sua invisibilidade entre plataformas e Web. Felizmente, conseguimos adicionar mais 4 personagens ao nosso arsenal, um total de 6 personagens invisíveis que agora podemos usar para esconder nossos segredo em “strings”. Tudo pronto! Vamos atacar…!

Armar

O que é o StegCloak e como ele funciona?

O StegCloak é um módulo de steganografia JavaScript puro que pode ser usado para ocultar segredos dentro de texto sem formatação depois de passar por duas camadas de compressão máxima possível e uma camada de criptografia. Portanto, ele não apenas esconde o segredo, mas também o protege com uma senha de sua escolha, juntamente com uma variedade de outros recursos.

Escondendo

Escondendo segredos em tweets

Revelando

Extraindo segredo oculto do tweet

Uma breve ideia de como o StegCloak esconde seus segredos e os comprime

Etapa 1: Compactar e criptografar a frase.

A segurança teve um papel nesse tipo de hack e, com o StegCloak, queríamos que ele satisfizesse o princípio de Kerckhoff, que afirma:

Um sistema criptográfico ideal deve ser seguro, mesmo que tudo sobre o sistema seja exposto ao público, exceto a chave secreta.

Kerckhoff

Mesmo que o invasor identifique como o algoritmo funciona, não deve ser possível revelar a mensagem secreta.

Elucidando o princípio

Para isso, precisamos de criptografia simétrica baseada em senha. Considerando as tendências humanas de usar senhas pequenas e fracas e também sua preferência por usar a mesma senha várias vezes, decidimos derivar uma chave forte da senha fornecida e também aumentar a aleatoriedade de chave introduzindo bits aleatórios.

A aleatoriedade na chave é necessária para evitar ataques com base na análise de vários textos cifrados gerados com a mesma chave. Agora, os modos usuais de cifra de bloco no AES, como ECB ou CBC, resultaram em preenchimento adicional de um bloco mínimo de 16 bytes. Portanto, para enviar os blocos 0 do modo CBC “oi” para o comprimento 16, eles são removidos durante a extração. Isto é mau. Portanto, usamos o modo de cifra de fluxo CTR (padding less cipher) para gerar o texto cifrado.

Etapa 2: codifique e comprima novamente com os dois caracteres extras.

Como mostrado na figura acima, embora tivéssemos seis caracteres ZWC, apenas 4 foram usados, pois 6 não é uma potência de 2. Os dois caracteres extras (U + 2063, U + 2064) são usados para fazer uma camada adicional de Huffman abstraído, redundância de redução de compactação. Depois que o segredo foi convertido em WCs, os dois ZWCs mais repetidos no fluxo são determinados, como U + 200D e U + 200C.

Agora, a cada duas ocorrências consecutivas de U + 200Ds e U + 200Cs são substituídas por uma U + 2063 ou U + 2064. Isso economiza muito, pois a redundância era frequentemente observada.

Etapa 3: incorpore o fluxo invisível ao primeiro espaço do texto da capa.

“Oi” agora está escondido na frase “hello world” em 6 caracteres, então o tamanho total da string é:

10 + 6 = 16 caracteres

Extração

Apenas o contrário, nada complicado, mas como o comprimento da carga aumenta quando adicionamos recursos como criptografia e invisibilidade, fazemos duas camadas de compactação(antes e depois) para minimizar o custo o máximo possível. Portanto, é apenas um pequeno preço a pagar pela salvação.

Você pode, a qualquer momento, desativar alguns recursos para reduzir o comprimento da carga útil, projetamos o StegCloak para ser flexível as necessidades do usuário.

Estilo do módulo

A vida é muito mais fácil quando você pode visualizar suas funções como uma curva em um gráfico.

Kyle Simpson

O StegCloak segue o paradigma de programação funcional e como um todo consiste em apenas duas funções: ocultar e revelar. Essas duas funções são construídas usando várias pequenas peças de Lego.

Essas peças nada mais são do que funções Puras ou Versões diferentes da mesma função pura que foi selecionada, etc. O StegCloak possui apenas uma função impura que é ‘encrypt ()’, pois gera um bit aleatório para aumentar a segurança da cifra.

Fluxo

Como funciona!

Na minha perspectiva, ter uma abordagem funcional faz com que seu programa pareça mais um fluxograma, aumentando assim sua legibilidade.

Função Hide() stegcloak.js
Função Reveal() stegcloak.js

O StegCloak usa uma biblioteca de programação funcional chamada RamdaJS. O R.Pipe recebe funções e passa os argumentos para a primeira função, onde sua saída é fornecida como entrada para a próxima função no pipe. Você pode ver que as peças podem ser enviadas por proxy a outro pipe ou operadas antes de serem enviadas para o próximo pipe. A legibilidade e o estilo sem pontos foram um dos maiores focos do design do Stegcloak.

Revelando o mistério da citação

Sabe ⁡‍‌⁢⁠‍‌⁤‌⁡‌⁡‌‍⁠‌⁣⁡‍⁣‍⁣‍‌⁠‍⁤‌⁠⁢‍⁠⁢‌‌‌⁠‍‌⁤‌⁠‌⁡‍⁡‍⁠‍⁣⁡‍⁤‌‌⁠⁤‌⁡‍‌⁡‌⁡‍⁠‍⁡⁠⁡o que a vida faz?

  • Copie a frase acima e visite: https://stegcloak.surge.sh/
  • Digite a senha: aparecium em Reveal e cole a frase acima em STEGCLOAKED MESSAGE*

Forte abraço!!!!

Artigo traduzido de: Mohan Sundar

Tags: , , , ,

Deixe um comentário

O seu endereço de e-mail não será publicado.