Embora a codificação base64 não tenha a intenção de criptografar, não é muito difícil pensar que o processo de codificação poderia ser temperado de alguma forma para criar uma criptografia. Certamente, não sou a primeira pessoa a pensar em tal tentativa de criptografia usando a codificação base64. Portanto, gostaria de perguntar que tipos de estratégias de criptografia de base64 são conhecidas?
Comentários
- Como uma cifra de fluxo de 6 bits?
- geralmente a criptografia acontece antes que os dados sejam executados por meio de Base64
- Eu ‘ já vi esquemas de criptografia base64 usados antes, mas todos eles poderiam ser trivialmente quebrado. Esta pergunta faz sentido porque as pessoas podem estar procurando por algoritmos como este. No entanto, o bom senso provavelmente significa que indicamos que base64 não é uma cifra e é o resultado da confusão de codificação com criptografia. Observe que muitos de nós assumiremos que a premissa desta questão está errada: que um esquema de codificação pode ser usado para criptografia. Isso pode resultar em votos negativos, mesmo se a questão for pelo menos interessante para muitos criptógrafos iniciantes.
- Talvez tangencialmente relevante: crypto.stackexchange.com/questions/62425/… , crypto.stackexchange.com/questions/5862/… e crypto.stackexchange. com / questions / 45215 / …
Resposta
Isso foi retirado da entrada do Wiki para Base64:
Se você realmente com o objetivo de adulterar a codificação Base64 para fornecer criptografia, isso pode ser feito no nível do Índice destacado acima. Você precisaria de uma chave secreta, uma função de derivação de chave feita sob medida para criar uma semente de alta entropia que então iniciou um gerador de números pseudo-aleatórios. A saída do gerador (6 bits) seria então submetida a um XOR com o Índice para alterar a codificação de cada caractere. E essa técnica pode ser revertida para decifrar a mensagem criptografada.
Você vê que é tudo um pouco incômodo. Tradicionalmente, você cria o texto cifrado e, em seguida, codifica-o. Além de cortar uma sequência aleatória típica de 8 bits para 6 bits, a carga de trabalho é idêntica à cifra de fluxo tradicional . Na verdade, você precisa de 33% de cálculos extras, mas isso não está aqui nem ali.
Você pode ser o primeiro a ter pensado nesta variante Base64, pois ninguém parece estar ciente de um comportamento semelhante. Mas isso deve funcionar.
Comentários
- Obrigado por esta sugestão interessante! Na verdade, eu tinha em mente coisas simples, como permutar a associação da tabela de letras de 6 bits. Ou introduzir uma tecla e ter uma operação xor bit a bit em cada letra que percorre a tecla ou algo semelhante.
- @Kagaratsch Bem, acho que ‘ estamos pensando em algo semelhante linhas. Para permutá-lo ‘, você precisará da funcionalidade PRNG e para vincular uma chave a um PRNG você ‘ precisará de algum tipo de função de derivação de chave, caso contrário ‘ Haverá uma incompatibilidade entre o formato da chave e o formato / estado necessário para operar o PRNG. Se você simplesmente permutar sem uma chave ou usar o ciclo de caracteres da chave, o esquema ‘ não é muito seguro e, afinal de contas, é crypto.SE 🙂
- @PaulUszak Esse nome técnico fica bastante óbvio assim que você o conhece … ele ‘ é simplesmente chamado de ” Cifra XOR “. 😉 No entanto, observe que a análise de frequência irá quebrá-lo trivialmente. O mesmo vale para ataques de texto simples conhecidos. Ah, e para ser completo em relação à nomenclatura técnica: quando você lança um prng, tal ” cifra XOR ” se transforma em ” cifra de fluxo “. Mas você provavelmente já sabia disso, não ‘ sabia?
- @PaulUszak Não tenho certeza por que você disse ” não “. Além disso, você pode ter certeza de que sei o que significa ” andar de bicicleta “. Uma cifra XOR percorre a mesma chave repetidamente e na mesma ordem, assim como você descreve. Verifique o ” exemplo ” desse link do wiki; corresponde a suas descrições 100%…
a bitwise xor operation on each letter cycling through the key
eCycling round through the key means that the plain text will be XORed with the same sequence over and over, and in the same order.
– que ‘ é chamado de ” Cifra XOR “. Nenhum erro ou lacuna de linguagem aí. - Qualquer maneira de ajustar base64 dessa forma pode ser fatorada em (a) definir uma cifra em strings de byte e então (b) aplicar base64 padrão a sua saída, mapeando strings de byte de texto cifrado para texto simples. Não ‘ não há sentido em mesclar (a) e (b) – isso não adiciona segurança e complica desnecessariamente a descrição da cifra subjacente e do padrão implícito base64.
Resposta
Isso não faz sentido. Não há uma chave secreta em base64: a codificação e decodificação de base64 são funções públicas que qualquer um pode avaliar.
A única maneira que a base64 está relacionada à criptografia é que é conveniente codificar o texto cifrado de algum sistema de criptografia, que é uniformemente distribuído em strings de 8 bits, em um conjunto limitado de US-ASCII que não será munged ou rejeitado em contextos que são limitados a texto simples, como XML.
Comentários
- +1 (… e base64 produz resultados mais curtos do que a codificação hexadecimal, por isso foi desenvolvido e tende a ser usado com frequência em aplicativos.)
- É perfeito sentido 🙂 A questão foi colocada como hipotética e o OP busca possibilidades de implementação. Não ‘ s nenhuma lei natural exigindo que toda a criptografia tenha que ser super eficiente. Só precisa criptografar / descriptografar. Você sabia que as pessoas ainda constroem motores a vapor e têm muito orgulho delas ..?
- @PaulUszak Não ‘ não faz sentido como base64, uma transformação pública entre duas representações equivalentes de dados, é um tipo diferente de objeto de um esquema de criptografia que envolve segredos não conhecidos por um adversário. Qualquer maneira de modificar a interface e os internos de base64 para colocar algum tipo de chave e cifra nela pode ser fatorada na transformação de representação padrão de base64 e em alguma cifra subjacente cuja segurança é irrelevante para a parte base64. Se você fez uma máquina Enigma movida a vapor, diria que modificou o conceito de energia a vapor em um esquema de criptografia?
- @SqueamishOssifrage Sim.
Resposta
A regra de ouro da criptografia deve ser: “Não é porque você não pode ler o texto que isso está criptografado”. Base64 não se destina a ser usado para criar texto cifrado e não deve ser usado para esse fim.
Os métodos de criptografia sempre contam com um segredo ou artefatos que garantem que apenas os atores da comunicação podem reverter o texto cifrado. Se não, como com Base64, então não é criptografia.
Base64 se destina a codificar binário como texto com várias vantagens sobre outros esquemas de codificação. A privacidade não está entre essas vantagens.
Resposta
Sim, há interesse em criptografar upstream base64: é a economia em iterações. Quando criptografamos os dados e depois os codificamos, temos que fazer pelo menos dois loops: um na criptografia dos dados e o outro na codificação dos dados gerados. Criptografando o upstream podemos reduzir a um loop e, portanto, ganhe desempenho significativo.
@ e-sushi: Na verdade, não há muitos exemplos, exceto este que usa apenas um loop: php_base64encrypted
Provavelmente existem outras maneiras de fazer melhor, mas isso prova que é possível …
Editar: desculpe, não estou muito familiarizado com este site.
Comentários
- Você pode fornecer um exemplo (link para papel ou algo assim) de tal `interesse em criptografar upstream base64`? Tentei encontrar mais informações usando meu mecanismo de pesquisa favorito , mas de alguma forma eu falhei. Um indicador seria muito apropriado eciada.
- A codificação Base64 é um processo em sequência (ou seja, permite que um fluxo de dados seja codificado de forma incremental à medida que ‘ é gerado, sem ter que primeiro ler tudo). Assim, seria perfeitamente possível ter um esquema de criptografia convencional alimentando sua saída em um codificador base64 incremental, sem ter que ” fazer pelo menos dois loops ” sobre os dados. A única razão pela qual isso não ‘ t mais comumente feito é provavelmente o fato de que, para fluxos de dados longos o suficiente para torná-los úteis, ‘ s geralmente muito mais eficiente pular a codificação base64 inteiramente e apenas transmiti-los e / ou armazená-los como dados binários brutos.