Tuesday 17 October 2017

Aes Cbc Vs Gcm Forex


CCM - este modo aceita tags de autenticação de comprimento variável de 32 bits a 128 bits, permitindo, de fato, diferentes graus de proteção contra modificações não autorizadas, os contras: A dose em modo CCM não prevê serviços de confidencialidade. Em alguns casos, usa mecanismo de autenticidade de dados de externo. GCM - A criptografia e autenticação do GCM são seguras contra o ataque de texto simples escolhido e o GCM também é seguro ao usar a cifra de bloco AES. Mas: Há problemas de segurança ao reutilizar o IV e, claro, tanto para GCM e CCM você tem que usar timestamps ou replay ataque pode accure e, claro, você precisa de um comprimento de tag apropriado. Para CBC-MAC depende porque você usa CBC para criar o MAC e CBC oferece criptografia serial e decodificação paralela, mas uma mudança de um bit em um bloco muda tudo o que vem depois na criptografia, mas não afeta a descriptografia. Um problema conhecido com CBC-MAC está usando a mesma chave para criptografia e para autenticação, neste caso, se você usar o modo CBC de modo que o último bloco seria o MAC. Aqui é o lugar para mencionar que uma das fontes que eu usei é de uma pesquisa universitária alemã. EDIT: encontrado o nome dele: ruhr-universitt-bochum. Eu estou tentando aprender mais sobre o modo GCM e como ele difere entre CBC. Eu já sei que o GCM fornece um MAC que é usado para autenticação de mensagens. Pelo que eu li e visto fragmentos de código é que o GCM faz um exlusive ou muito parecido com CBC, mas Im não sei o que o exclusivo ou é contra. No modo CBC, o exlusive - ou é plaintext contra o bloco de texto cifrado anterior, exceto para o primeiro bloco que usa um IV aleatório. O GCM faz o mesmo, ou faz o exclusivo - ou contra alguma outra coisa Se sim, alguém pode explicar brevemente como o GCM usa o IV e como o exclusivo - ou é feito. Os modos GCM e CBC funcionam internamente de forma bastante diferente. Ambos envolvem uma cifra de bloco e um exclusivo - ou, mas eles os usam de maneiras diferentes. No modo CBC, você criptografa um bloco de dados, tomando o bloco de texto simples atual e exclusivo-oring que com o bloco de texto cifrado anterior (ou IV) e, em seguida, enviando o resultado disso através da cifra de bloco a saída da cifra de bloco é o Bloco de texto cifrado. O modo GCM oferece privacidade (criptografia) e integridade. Para fornecer criptografia, o GCM mantém um contador para cada bloco de dados, ele envia o valor atual do contador através da cifra de bloco. Então, toma a saída da cifra do bloco, e as ors exclusivas que com o plaintext para formar o texto cifrado. Observe duas diferenças-chave: o que está sendo exclusivo no modo CBC, o texto sem formatação é exclusivo-ored com dados que o atacante sabe (o IV ou um bloco de texto cifrado anterior), portanto, que em si não fornece qualquer segurança inerente Fazê-lo para minimizar a chance de que enviamos o mesmo bloco duas vezes através da cifra de bloco). No modo GCM, o plaintext é exclusivo-ored com saída da cifra de bloco é inerente no modelo de segurança que o atacante não pode adivinhar essa saída (a menos que ele já conhece o texto sem formatação eo texto cifrado). O que está sendo enviado através da cifra de bloco no modo CBC, o texto sem formatação é enviado através da cifra de bloco (depois de ter sido randomizado com um exclusivo ou) no modo GCM, o que está sendo enviado através da cifra de bloco não depende realmente dos dados sendo criptografados, Mas apenas em estado interno. Quanto à forma como o GCM usa um IV (eu pessoalmente considero não um termo melhor para o que GCM usa, porque isso enfatiza a idéia de que com o GCM, você não pode usar o mesmo nonce para a mesma chave duas vezes), bem, ele é usado para inicializar o contador. Não, no GCM, pegamos um contador, enviamos isso através da cifra de bloco e, em seguida, exclusivo - ou que com o texto simples para formar o texto cifrado. No lado do decryption, nós mantemos o mesmo contador, enviamo-lo através da cifra do bloco, e então exclusive - ou aquele com o texto cifrado para dar forma ao plaintext. Ndash poncho Apr 9 12 at 12: 41Qual deles são preferidos em que circunstâncias Id gostaria de ver a lista de avaliação crtieria para os vários modos, e talvez uma discussão sobre a aplicabilidade de cada critério. Por exemplo, acho que um dos critérios é o tamanho do código de criptografia e descriptografia, que é importante para sistemas embutidos de microcódigo, como adaptadores de rede 802.11. Se o código necessário para implementar CBC é muito menor do que o necessário para CTR (eu não sei que isso é verdade, é apenas um exemplo), então eu poderia entender por que o modo com o código menor seria preferido. Mas se eu estou escrevendo um aplicativo que é executado em um servidor, ea biblioteca AES estou usando implementa CBC e CTR de qualquer maneira, então este critério é irrelevante. Veja o que quero dizer com lista de critérios de avaliação e aplicabilidade de cada critério. Isso não é realmente programação relacionada, mas é algoritmo relacionado. O ECB não deve ser usado se criptografar mais de um bloco de dados com a mesma chave. CBC, OFB e CFB são semelhantes, porém OFB / CFB é melhor porque você só precisa de criptografia e não decriptação, que pode economizar espaço de código. CTR é usado se você quer boa paralelização (isto é, velocidade), em vez de CBC / OFB / CFB. O modo XTS é o mais comum se você estiver codificando um dado aleatório acessível (como um disco rígido ou RAM). OCB é de longe o melhor modo, já que permite criptografia e autenticação em uma única passagem. No entanto, existem patentes sobre ele nos EUA. A única coisa que você realmente tem que saber é que o ECB não deve ser usado a menos que você esteja apenas criptografando um bloco. XTS deve ser usado se você estiver criptografando dados acessados ​​aleatoriamente e não um fluxo. Você deve sempre usar IVs exclusivo cada vez que você criptografar, e eles devem ser aleatórios. Se você não pode garantir que eles são aleatórios, use OCB como ele só requer um nonce, não um IV, e há uma diferença distinta. Um nonce não cair a segurança se as pessoas podem adivinhar o próximo, um IV pode causar esse problema. A CTR é passível de paralelização porque você pode dividir a mensagem em pedaços, cada pedaço tendo um intervalo de contadores associados a ele, e criptografar (ou descriptografar) cada pedaço de forma independente. Em contrapartida, o CFB baseia-se na saída do bloco anterior como uma das entradas para o próximo, por isso é rigorosamente sequencial e inerentemente não parallelizable. Similar para os outros modos mencionados. Ndash Jonathan Leffler Oct 17 10 at 2:47 Mesmo se você estiver criptografando apenas um bloco, o ECB não deve ser usado se você estiver criptografando esse bloco mais de uma vez (mesmo possivelmente mais de uma vez) com a mesma chave. Ndash yfeldblum Nov 24 10 at 13:53 Uma palavra de introdução: Esta resposta foi em parte uma resposta a um monte de perguntas Ive visto sob a tag de criptografia que mostrou as pessoas implantando código totalmente inseguro. Dirigindo-se a esses programadores eu escrevi a seguinte frase de abertura com a intenção de agitar-los o suficiente para repensar sua abordagem à criptografia, antes de sua aplicação é atacada. Se você está aqui no processo de aprendizagem, isso é ótimo Precisamos de mais programadores com conhecimento de fundo em criptografia. Continue perguntando e adicione um silêncio ainda à minha abertura: Se você precisa fazer esta pergunta, você provavelmente não sabe o suficiente sobre criptografia para implementar um sistema seguro. Eu sei que isso soa duro, então deixe-me ilustrar o meu ponto: Imagine que você está construindo um aplicativo da web e você precisa armazenar alguns dados da sessão. Você pode atribuir a cada usuário um ID de sessão e armazenar os dados de sessão no servidor em mapeamento de mapa hash ID de sessão para dados de sessão. Mas então você tem que lidar com este estado traquinas no servidor e se em algum momento você precisa de mais de um servidor as coisas vão ficar confusas. Então, em vez disso, você tem a idéia de armazenar os dados da sessão em um cookie no lado do cliente. Você criptografá-lo, é claro, para que o usuário não pode ler e manipular os dados. Então, qual modo você deve usar Vindo aqui você lê a resposta superior (desculpe por te chamar para fora myforwik). O primeiro coberto - ECB - não é para você, você quer criptografar mais de um bloco, o próximo - CBC - soa bem e você não precisa do paralelismo de CTR, você não precisa de acesso aleatório, então não XTS e patentes são Uma PITA, então não OCB. Usando sua biblioteca de criptografia você percebe que você precisa de algum preenchimento, porque você só pode criptografar múltiplos do tamanho do bloco. Você escolhe PKCS7 porque foi definido em alguns padrões de criptografia sérios. Depois de ler em algum lugar que CBC é provably seguro, se usado com um random IV e uma cifra de bloqueio seguro, você descansar à vontade, mesmo que você está armazenando seus dados sensíveis no lado do cliente. Anos mais tarde, após o seu serviço realmente cresceu para tamanho significativo, um especialista em segurança de TI entra em contato com você em uma divulgação responsável. Ela está dizendo que ela pode descriptografar todos os seus cookies usando um ataque oracle padding. Porque seu código produz uma página de erro se o preenchimento é de alguma forma quebrado. O problema é que há um monte de armadilhas em relação à criptografia e é extremamente fácil de construir um sistema que parece seguro para o leigo, mas é trivial para quebrar para um atacante experiente. O que fazer se você precisar criptografar dados Para conexões ao vivo use o TLS (certifique-se de verificar o nome do host do certificado ea cadeia do emissor). Se você não pode usar TLS, procure o nível mais alto API seu sistema tem para oferecer para a sua tarefa e não se esqueça de entender as garantias que oferece e mais importante o que ele não garante. Para o exemplo acima, um framework como o Play oferece instalações de armazenamento do lado do cliente. Ele não invalida os dados armazenados depois de algum tempo, no entanto, e se você alterou o estado do lado do cliente, um invasor pode restaurar um estado anterior sem que você perceba. Se não houver nenhuma abstração de alto nível disponível, use uma biblioteca de criptografia de alto nível. Um exemplo proeminente é NaCl e uma implementação portátil com muitas ligações de linguagem é sódio. Usando essa biblioteca, você não precisa se preocupar com os modos de criptografia etc., mas você precisa ser ainda mais cuidadoso com os detalhes de uso do que com uma abstração de nível mais alto, como nunca usar um nonce duas vezes. Se por algum motivo você não pode usar uma biblioteca de criptografia de alto nível, por exemplo, porque você precisa interagir com o sistema existente de uma maneira específica, não há maneira de educar-se completamente. Eu recomendo a leitura de engenharia de criptografia por Ferguson, Kohno e Schneier. Por favor não engane-se em acreditar que você pode construir um sistema seguro sem o fundo necessário. A criptografia é extremamente sutil e quase impossível testar a segurança de um sistema. Para fins educacionais, uma comparação dos modos somente criptografia: Modos que exigem preenchimento. Como no exemplo, o preenchimento geralmente pode ser perigoso porque abre a possibilidade de ataques de oracle de preenchimento. A defesa mais fácil é autenticar cada mensagem antes da descriptografia. Ver abaixo. O ECB criptografa cada bloco de dados independentemente e o mesmo bloco de texto simples resultará no mesmo bloco de texto cifrado. Dê uma olhada na imagem Tux criptografada ECB na página da Wikipedia ECB para ver por que este é um problema sério. Eu não sei de qualquer caso de uso onde o BCE seria aceitável. CBC tem um IV e, portanto, precisa de aleatoriedade cada vez que uma mensagem é criptografada, a alteração de uma parte da mensagem requer re-criptografando tudo após a mudança, erros de transmissão em um bloco de texto ciphertext completamente destruir o plaintext e alterar o descriptografia do próximo bloco, Pode ser parallelized / criptografia cant, o plaintext é maleável a um certo grau - isso pode ser um problema. Modos de criptografia de fluxo. Estes modos geram um fluxo pseudo aleatório de dados que podem ou não depender do texto simples. De modo semelhante aos cifrados de fluxo em geral, o fluxo pseudo aleatório gerado é XORed com o texto simples para gerar o texto cifrado. Como você pode usar como muitos pedaços do fluxo aleatório como você gosta você não precisa preenchimento em tudo. Desvantagem desta simplicidade é que a criptografia é completamente maleável. O que significa que a descriptografia pode ser alterada por um atacante de qualquer maneira que ele gosta, como para um texto simples p1, um texto cifrado c1 e uma pseudo-corrente aleatória r e atacante pode escolher uma diferença d tal que a descriptografia de um texto cifrado c2c1d é p2 p1d, P2c2r (c1d) rd (c1r). Também o mesmo fluxo pseudo aleatório nunca deve ser usado duas vezes como para dois ciphertexts c1p1r e c2p2r, um atacante pode calcular o xor dos dois plaintexts como c1c2p1rp2rp1p2. Isso também significa que a alteração da mensagem requer uma nova criptografia, se a mensagem original puder ter sido obtida por um invasor. Todos os seguintes modos de criptografia a vapor só precisam da operação de criptografia da cifra de bloco, de modo que, dependendo da cifra, isso pode salvar algum espaço (silício ou código de máquina) em ambientes extremamente restritos. CTR é simples, ele cria um fluxo pseudo aleatório que é independente do texto simples, diferentes fluxos pseudo aleatórios são obtidos por contagem de diferentes nonces / IVs que são multiplicados por um comprimento máximo da mensagem de modo que a sobreposição é impedida, usando nonces mensagem criptografia é Possível sem por mensagem aleatoriedade, descriptografia e criptografia são concluídos paralelizáveis, erros de transmissão só efeito os bits errados e nada mais OFB também cria um fluxo pseudo aleatório independente do plaintext, diferentes fluxos pseudo aleatórios são obtidos começando com um nonce diferente ou aleatório IV Para cada mensagem, como com CTR usando nonces mensagem criptografia é possível sem por mensagem aleatoriedade, decodificação é parallelizable / criptografia não é, como com CTR transmissão erros só efeito os errados bits e nada mais CFB s pseudo aleatória fluxo depende do texto, um Diferente nonce ou IV aleatório é necessário para cada mensagem, como com CTR e OFB usando nonces mensagem de criptografia é possível sem aleatoriedade mensagem, descriptografia é paralelizar / criptografia não é, os erros de transmissão completamente destruir o bloco a seguir, mas apenas o efeito bits errados O bloco atual Modos de criptografia de disco. Esses modos são especializados para criptografar dados abaixo da abstração do sistema de arquivos. Por razões de eficiência, alterar alguns dados no disco deve exigir somente a reescrita de no máximo um bloco de disco (512 bytes ou 4kib). Eles estão fora do escopo desta resposta, pois eles têm cenários de uso muito diferentes do que o outro. Não usá-los para nada, exceto criptografia de disco de nível de bloco. Alguns membros: XEX, XTS, LRW. Criptografia autenticada: Para evitar o preenchimento de ataques oracle e alterações no texto cifrado, é possível calcular um código de autenticação de mensagem (MAC) no texto cifrado e somente descriptografá-lo se ele não tiver sido adulterado. Isso é chamado encrypt-then-mac e deve ser preferido a qualquer outra ordem. Com exceção de muito poucos casos de uso, a autenticidade é tão importante quanto a confidencialidade (o último dos quais é o objetivo da criptografia). Esquemas de criptografia autenticados (com dados associados (AEAD)) combinam o processo de duas partes de criptografia e autenticação em um modo de cifra de bloco que também produz uma marca de autenticação no processo. Na maioria dos casos, isso resulta em melhoria de velocidade. CCM é uma combinação simples do modo CTR e um CBC-MAC. Usando duas criptografia de bloco criptografia por bloco é muito lento. OCB é mais rápido, mas onerado por patentes. Para livre (como em liberdade) ou software não-militar o titular da patente concedeu uma licença livre. embora. GCM é uma combinação muito rápida mas discutivelmente complexa de modo CTR e GHASH, um MAC sobre o campo Galois com 2128 elementos. Seu uso amplo em padrões de rede importantes como TLS 1.2 é refletido por uma instrução especial Intel introduziu para acelerar o cálculo de GHASH. Recomendação: Considerando a importância da autenticação, recomendaria os seguintes dois modos de codificação de blocos para a maioria dos casos de uso (exceto para fins de criptografia de disco): Se os dados forem autenticados por uma assinatura assimétrica use CBC, caso contrário use o GCM. Jordanpg, eu don39t acho que eu posso responder a essa pergunta. É claro que depende de que livros você lê. As bibliotecas de criptografia java são particularmente de baixo nível ea documentação está repleta de código legado e práticas ruins como Cipher c1 Cipher. getInstance (quotDES47ECB47PKCS5Paddingquot). Assim, você precisa de uma compreensão firme de quais primitivos essenciais existem, o que eles devem fazer e como eles interagem. Mais difícil de estimar é quanto conhecimento você tem de como a criptografia pode falhar. Ndash Perseids Jan 17 15 às 19:31 Qualquer coisa menos o ECB. Se estiver usando CTR, é imperativo que você use um IV diferente para cada mensagem, caso contrário você acabar com o atacante sendo capaz de tomar dois textos cifrados e derivar um texto não criptografado combinado. A razão é que o modo CTR transforma essencialmente uma cifra de bloco em uma cifra de fluxo ea primeira regra de cifras de fluxo é nunca usar o mesmo KeyIV duas vezes. Realmente não há muita diferença em como os modos são difíceis de implementar. Alguns modos requerem apenas que a cifra de bloco funcione no sentido de criptografia. No entanto, a maioria das cifras de bloco, incluindo AES, não têm muito mais código para implementar a descriptografia. Para todos os modos de criptografia, é importante usar IVs diferentes para cada mensagem se suas mensagens pudessem ser idênticas nos primeiros vários bytes e você não quer que um invasor saiba disso. Leia as outras respostas, as recomendações contra o BCE são sobre segurança (a maioria não mencionar as razões), e como é fácil de quebrar. Se você escolher CBC, CFB ou OFB, você precisará enviar ao longo de seus dados um vetor de inicialização (IV), que é basicamente algo aleatório (cada vez que você criptografar nesses modos, o resultado criptografado parece diferente). Você só pode descriptografar os dados se você tiver o IV. Se enviar um IV ao longo é inconveniente, impossível (restrições de protocolo, já in-place code, ou wtvr) ou ECB é o único disponível modo AES, para tornar o ECB mais seguro, pad o início da seqüência de caracteres para ser dados criptografados com bytes aleatórios Opcionalmente comprimento variável com base no valor do primeiro byte não random teclado, mas aleatório cada vez que você pad). GZip ou comprimir os dados com o que você tem disponível. Encriptar. Depois de descriptografar e descompactar, basta remover o preenchimento antes de usar os dados. Nota: O ECB irá criptografar os blocos subseqüentes não baseados em como o anterior foi criptografado (independentemente de quanto dados você tem que criptografar, preencher com bytes aleatórios no começo não mudará todos os blocos, apenas o primeiro ou os que você acolchoou). Isso é aliviado pelo algoritmo de paddingcompression aleatório (no entanto, ele não funciona sempre - talvez você poderia xor criptografar com uma senha aleatória armazenada no início antes de criptografar com ECB). Respondeu Mar 7 12 at 9:36 CBC sem IV ainda é melhor do que o BCE. O prefixo aleatório não ajuda com o BCE, uma vez que não se encaixa. Um bloco de tamanho aleatório (16 bytes para AES) prefixo para CBC, por outro lado é equivalente a usar um normal IV. Ndash CodesInChaos Dec 11 12 at 15:32 Sim, mas gzip força o ECB para a cadeia, especialmente para o texto. Se tudo o que você tem é o modo ECB, a ação correta é usar o modo ECB para gerar um keystream, concatenando um nonce com um contador de incremento, em seguida, criptografando-lo, tornando assim um modo CTR cifra. Não sei se alguém já ouviu alguém sugerir que a compactação do texto sem formatação torna o texto cifrado mais seguro. Ndash Dev Oct 14 13 às 2:50

No comments:

Post a Comment