Algoritmos de criptografia como Blowfish, AES, RC4, DES e Seal são implementados em uma das duas categorias de cifras. Quais são as vantagens / desvantagens do tipo de cifras?
Resposta
Embora ambas sejam cifras simétricas, as cifras de fluxo são baseadas em gerar um keystream criptográfico “infinito” e usá-lo para criptografar um bit ou byte por vez (semelhante ao pad de uma só vez), enquanto as cifras de bloco funcionam em blocos maiores de dados (ou seja, blocos) por vez, geralmente combinando blocos para segurança adicional (por exemplo, AES no modo CBC).
- As cifras de fluxo são normalmente mais rápidas do que o bloco, mas têm seu próprio preço.
- As cifras de bloco normalmente requerem mais memória, uma vez que funcionam em grandes blocos de dados e muitas vezes têm “transferência” de blocos anteriores, ao passo que, como as cifras de fluxo funcionam em apenas alguns bits por vez, elas têm requisitos de memória relativamente baixos (e, portanto, mais baratos de implementar em cenários limitados, como dispositivos incorporados, firmware e hardware específico) .
- As cifras de fluxo são mais difíceis de implementar corretamente e estão sujeitas a fraquezas com base no uso – uma vez que os princípios são semelhantes aos do teclado único, o fluxo de chaves tem requisitos muito rígidos. Por outro lado, que ” geralmente é a parte complicada e pode ser transferida para, por exemplo, uma caixa externa.
- Como as cifras de bloco criptografam um bloco inteiro por vez (e, além disso, têm modos de “feedback” que são mais recomendados), elas são mais suscetíveis a ruídos na transmissão, isto é, se você bagunçar uma parte do dados, todo o resto é provavelmente irrecuperável. Enquanto que com as cifras de fluxo, os bytes são criptografados individualmente sem nenhuma conexão com outros blocos de dados (na maioria das cifras / modos) e geralmente têm suporte para interrupções na linha.
- Além disso, as cifras de fluxo não fornecem proteção de integridade ou autenticação, enquanto algumas cifras de bloco (dependendo do modo) podem fornecer proteção de integridade, além de confidencialidade.
- Por causa de todos os itens acima , as cifras de fluxo geralmente são melhores para os casos em que a quantidade de dados é desconhecida ou contínua – como fluxos de rede. Bloquear cifras, por outro lado, ou mais útil quando a quantidade de dados é pré-conhecida – como um arquivo, campos de dados ou protocolos de solicitação / resposta, como HTTP, onde o comprimento da mensagem total já é conhecido no começo.
Comentários
- O segundo marcador não é preciso. A diferença na memória devido ao ” transportar ” dos blocos anteriores é insignificante e muito menor do que a diferença na memória de algoritmo para algoritmo ( por exemplo, compare RC4, com seus 256 bytes de estado interno, com AES, com 0 bytes de estado interno em algumas implementações). O último marcador traça falsas distinções e é um conselho ruim.
- @ D.W. O segundo marcador era ” em termos gerais “, como normalmente é o caso (mas aceito que não seja estritamente preciso).
- @DW você tem alguma base para seu comentário sobre o último item? Onde está a falsa distinção e por que você diz que este é um conselho ruim?
- sim, tenho uma base para meu comentário sobre o último item. Parece apenas confuso em toda a linha. Cifras de bloco são adequadas para streaming de dados; veja, por exemplo, modo CBC, modo CTR, etc., para vários modos de operação que funcionam bem com dados de streaming. As cifras de bloco não se restringem a casos em que a quantidade de dados é conhecida com antecedência. Eu ‘ não estou ciente de qualquer razão para considerar as cifras de fluxo melhores do que as cifras de bloco para dados de streaming (apesar do nome).
- D.W. está correto: a palavra ‘ Stream ‘ em Stream Cipher reflete que há um fluxo de chave – um fluxo de bits que é combinado com texto simples para produzir o texto cifrado. Não reflete a composição do texto simples. Obviamente, este é um detalhe que muitas vezes confunde desenvolvedores e engenheiros com os quais o último geralmente está implícito. As cifras de bloco podem ser usadas para manipular perfeitamente o fluxo de texto simples. Também frequentemente confuso é que as Cifras de Bloco podem ser usadas como uma Cifra de Fluxo com um modo de operação apropriado e quando o tamanho do bloco é atômico (por exemplo, 1 byte).
Resposta
Uma cifra de bloco é um algoritmo versátil que implementa uma chave permutação dependente de valores que são sequências de um número fixo de bits (chamados “blocos”). Ele pode ser usado para várias funções em muitos tipos de protocolos criptográficos. Uma dessas funções é a criptografia em massa de longos fluxos de dados; para conseguir tal coisa, a cifra de bloco deve ser usada com um modo de operação apropriado (também conhecido como “modo de encadeamento”), sendo o tradicional CBC e o o modo mais moderno e moderno é o CTR.
Uma cifra de fluxo é um algoritmo especializado para fins de criptografia em massa de longos fluxos de dados. A ideia é que, ao perder a versatilidade da cifra de bloco, seria possível criar um algoritmo mais eficiente (ou seja, algo que criptografa dados mais rápido ).
Ambas as cifras de bloco com um modo de criptografia orientado a fluxo e cifras de fluxo, podem apresentar problemas de segurança se a mesma chave for usada duas vezes, para dois fluxos distintos, sem ter um Vetor de inicialização apropriado, exclusivo / aleatório o suficiente. Para a criptografia CBC, o IV deve ser uma nova sequência uniformemente aleatória de bits, do mesmo tamanho que um bloco, para cada nova mensagem. Boas cifras de fluxo também aceitam um IV. Uma cifra de fluxo tradicional chamada RC4 é sem IV (sua especificação não indica onde ou como um IV poderia ser inserido), o que levou a muito caos e deu um nome impróprio para o conceito de cifras de fluxo.
Para cifras de fluxo mais novas, mais seguras (e mais rápidas), consulte o portfólio eSTREAM . Esses algoritmos passaram por uma análise bastante completa por muitos criptógrafos e são considerados “bastante seguros”.
Uma cifra de fluxo pode ser convertida em um Gerador de números pseudo-aleatórios criptografando uma longa sequência de bytes de valor zero. Na verdade, muitas (mas não todas) cifras de stream funcionam internamente sendo um PRNG, gerando uma longa sequência de bytes pseudoaleatórios dependentes de chave, que é subsequentemente combinada (por XOR bit a bit) com os dados para criptografar (ou descriptografar), então criptografar zero bytes é então equivalente a omitir o XOR completamente. Portanto, as cifras de fluxo são frequentemente usadas como PRNG personalizado.
Comentários
- Você se esqueceu de mencionar o que geralmente é mais seguro (fluxo x bloco).
- Não esqueci, porque a afirmação não faz sentido geral. Tanto as cifras de bloco quanto as cifras de fluxo podem fornecer segurança adequada, se aplicadas corretamente e não ‘ tenham deficiências estruturais.
- ” a versatilidade da cifra de bloco ” Tenho problemas com esta parte. O que torna uma cifra de bloco inerentemente mais versátil? As cifras de bloco podem ser usadas para criptografar e autenticar ambos os fluxos (por exemplo, TLS) ou dados em pacote (por exemplo, ESP) e mesmo para cifras de fluxo (por exemplo, TLS ou DTLS). Há casos em que uma cifra de stream parece mais ” natural ” (por exemplo, criptografar áudio) ou uma cifra de bloco parece mais ” natural ” (por exemplo, discos de criptografia), mas eu simplesmente não ‘ não vejo muitas lacunas em aplicativos razoáveis para ambos.
Resposta
Uma vantagem das cifras de fluxo que não foram mencionadas anteriormente é que elas não “Não preciso de preenchimento (as cifras de bloco operam em blocos completos, portanto, se você não tiver dados suficientes, deve gerar mais alguns de alguma forma). E surpresa (na verdade, a criptografia é o campo onde Murphy está em todos os lugares), o preenchimento pode ser feito errado, como exemplificado por exemplo em Practical Padding Oracle Attacks .
Além disso, a segurança das cifras de bloco depende muito do seu modo de operação. ainda vejo o BCE usado aqui e ali às vezes e não é muito melhor do que nenhuma criptografia tudo.
Basicamente, você não pode dizer que um é melhor do que o outro, é preciso examinar um criptosistema completo para fazer um julgamento de segurança.
Comentários
- em seu primeiro parágrafo: existem modos de operação para cifras de bloco que não ‘ precisam de preenchimento: por exemplo, modo CTR. Portanto, essa não é uma vantagem exclusiva das cifras de fluxo. Mas +1 em seu último parágrafo – bem dito!
- Bem, eu ‘ d dizer que CTR e OFB são construções para fazer uma cifra de fluxo a partir de uma cifra de bloco. Essa ‘ é outra grande coisa com cifras de bloco, eles podem ser facilmente usados como blocos de construção para outras coisas, sejam cifras de stream ou hashes de sentido único. As cifras de stream não são tão versáteis.
- Você se esqueceu de mencionar o que geralmente é mais seguro (stream vs block).
- Nenhuma é mais segura por natureza, ‘ é realmente como você os usa.
Resposta
Cifras de fluxo criptografam os dados de texto simples com um fluxo aleatório de bits (geralmente com um XOR porque pode ser revertido facilmente). Se você tiver dados de 128 bits, usará um strem psedurandom de 128 bits (sua chave) para criptografar.
As criptografias de bloco criptografam os dados de texto simples um bloco por vez com a mesma transformação (com base na chave )Então você tem seus dados de 128 bits, a cifra os quebra em blocos (como 4 blocos de 32 bits) e aplica a mesma transformação a cada bloco obtendo 4 blocos criptografados, que combinados formarão o criptograma final.
De Claro, por causa disso, os Block Cyphers são mais seguros, mas caros de usar em termos de complexidade de hardware envolvida. As codificações de fluxo são mais rápidas e “baratas”, mas podem ser suscetíveis a problemas de segurança se implementadas incorretamente.
Comentários
- O último parágrafo contém vários erros factuais. As cifras de bloco não são mais seguras em geral, nem são necessariamente piores no hardware. As cifras de stream não são necessariamente mais rápidas ou mais baratas.
- @DW: não obstante, as cifras de stream são geralmente mais rápidas ou mais baratas do que as cifras de bloco, porque ‘ é o negócio: um algoritmo menos versátil negociado para melhorar o desempenho. Uma cifra de fluxo que passa a ser mais lenta e cara do que AES / CTR simplesmente não é usada.
- Você se esqueceu de mencionar qual é geralmente mais seguro (fluxo x bloco).
Resposta
Os dados (o material a ser criptografado) geralmente vêm em fluxos. Para criptografá-lo, precisamos empregar uma cifra de fluxo, ou seja, um algoritmo de criptografia adequado para uso em um fluxo de dados. Um stream é uma sequência de bits (ou bytes) de comprimento arbitrário, variável ou não especificado.
As melhores cifras que inventamos até agora são geralmente cifras de bloco. Uma cifra de bloco é capaz de criptografar um único bloco de dados de tamanho fixo; e, pelas evidências ao nosso redor, aparentemente é mais fácil construir boas cifras de bloco do que cifras de fluxo.
Boas notícias, no entanto. Usando uma determinada cifra de bloco em alguns padrões específicos (um “modo de operação”) e com a ajuda de estratégias de preenchimento específicas, podemos transformar qualquer cifra de bloco em uma cifra de fluxo! Isso significa que podemos usar as melhores cifras, que são cifras de bloco, para criptografar quaisquer dados, a maioria dos quais vem em fluxos.
Comentários
- a segunda frase parece enganosa. Você pode criptografar dados de streaming usando uma cifra de bloco, usando qualquer um dos vários modos padrão de operação: por exemplo, modo CBC, modo CTR, etc. AES-CBC ainda é uma cifra de bloco. Na verdade, quase todos os modos padrão de operação para cifras de bloco já oferecem suporte para streaming de dados. Além disso, uma cifra de bloco não é segura sem um modo de operação, portanto, ‘ não é como um modo de operação, é algo opcional de que você só precisa quando deseja criptografar dados de streaming .