Neste segmento, quero falar sobre outra forma de criptografia, chamado formato criptografia preservar. Esta é mais uma vez algo que surge na prática bastante frequência, especialmente quando se trata de números de cartão de crédito de encriptação. E, assim, vamos ver como ele funciona. Lembre-se que um número de cartão de crédito é típico 16 dígitos, divididos em quatro blocos de quatro dígitos cada. Você provavelmente já ouviu antes que os primeiros seis dígitos são o que é chamado o número BIN, que representam o ID emitente. Por exemplo, todos os cartões de crédito emitidos pela VISA sempre começam com o dígito quatro; todos os cartões de crédito emitidos pela MasterCard início com dígitos 51 a 55, e assim por diante e assim por diante. Os próximos nove dígitos são de fato o número da conta que é específico para a, para o cliente em particular e do último dígito é uma soma de verificação que é calculado a partir dos últimos quinze dígitos. Portanto, há cerca de 20.000 grande números e por isso, se você fizer o cálculo acontece lá fora, são cerca de dois a 42 números de cartão de crédito possíveis, o que corresponde a cerca de 42 bits de informação que você precisa para codificar se você quiser representar um número de cartão de crédito compacta. Agora o problema é este. Suponha que nós queríamos para criptografar cartão de crédito números, de modo que quando o utilizador swipes o número do cartão de crédito no ponto do terminal de venda, principalmente no, você sabe, o dinheiro comerciantes registar. O dinheiro registo, este é chamado o terminal de ponto de venda, vai em frente e criptografa o número de cartão de crédito usando um pay-chave e está codificado toda a maneira até que ele vai para o banco ou até mesmo além do que, talvez até todo o caminho quando se vai para Visa. Agora, o problema é que estes números de cartão de crédito realmente passar através muitos, muitos, muitos pontos de processamento. Todos eles esperar obter basicamente algo que se parece com um número de cartão de crédito como um resultado. Então, se nós simplesmente queria criptografar algo no ponto final, a um ponto final, e descodificar na outra extremidade ponto, na verdade não é assim tão fácil, porque se tudo que fizemos foi criptografá-la utilizando AES, , mesmo que apenas usou AES determinista. A saída do cartão de crédito encriptado número seria 128 bloco bit. Dezasseis bytes que seria, que teria de ser enviado a partir de um sistema para o outro, até que atinja o seu destino. Mas cada um dos estes processadores, então, teria que ser mudado, porque eles estão todos esperando obter números de cartão de crédito. E assim a questão é, podemos criptografar no dinheiro registo, de modo que a criptografia resultante se parece com um cartão de crédito número. E, como resultado, nenhum destes sistemas intermediários teria de ser alterado. Apenas os pontos de extremidade teria de ser alterado. E ao fazê-lo seria realmente obter end-to-end encryption sem ter que realmente mudar um monte de software ao longo do caminho. Então a questão é, novamente, podemos ter esse mecanismo chamado criptografia formato de preservação, onde a encriptação de um cartão de crédito próprio produz algo que se parece com um cartão de crédito? Então é isso que eu Bolt-. O crédito criptografado número do cartão deve se parecer com um número válido de cartão de crédito regular. Então este é o objetivo de preservar o formato de criptografia. Mais abstratamente o que é que estamos tentando fazer, é basicamente construir uma permutação pseudo-aleatório no ponto zero de S menos um Para qualquer dado S. Assim, para o conjunto de números de cartão de crédito, S seria mais ou menos, você saber, dois para o 42. Na verdade, ele vai ser, não exatamente dois para o 42. Vai ser alguns números engraçadas que está em torno de dois a 42. E nosso objetivo é construir uma PRP que funciona exactamente no intervalo, de zero a S menos um. E o que está dado como entrada é, PRF. Digamos, algo como AES, que atua em blocos muito maiores, por exemplo, atua em dezesseis blocos de bytes. Então, nós estamos tentando, de alguma forma, diminuir o domínio do PRF para ajustá-la os dados que nos são dadas. E as perguntas é basicamente como para fazer isso. Bem, uma vez que temos uma tal construção, podemos facilmente nos para cartão encriptar números de crédito. O que faria é que a levaria a um crédito dado número do cartão. Gostaríamos de codificá-lo de tal forma que agora ele é representado como um número entre zero eo número total de números de cartão de crédito. Então, nós aplicamos a nossa PRP para que seria criptografar este número de cartão de crédito, você sabe, usando o número dois da construção o segmento de criptografia determinística. E então poderíamos mapear o número final de volta para ser regular, para olhar como val, regular o número do cartão, de crédito válido e, em seguida, enviar este ao longo do caminho. Então isso é como, isso é novamente criptografia expansão não. O melhor que podemos fazer, como eu disse antes é criptografar usando um PRP, exceto novamente o desafios técnicos que precisam de um PRP, que age sobre esse conjunto engraçado olhar especial de zero a S-1 para esse valor pré determinado de S. Portanto, meu objetivo é mostrar-lhe como para construir isso e uma vez vemos como fazê-lo, você também vai saber como criptografar número de cartão de crédito de modo que o resultado em texto cifra é em si um cartão de crédito número. Assim, as obras de construção em duas etapas. A primeira coisa que fazemos é diminuir PRF nosso a partir do conjunto de 0,1 ao fim, digamos a zero um para o 128 e, no caso de AES, duas 0,1 para o T, onde T é o mais próximo potência de dois para o valor S. Assim palavra S é algum número louco em torno de dois a 41. T seria basicamente, em seguida, 42 porque essa é a potência mais próxima dos dois que está logo acima do valor de S. Assim, o construção é basicamente vou usar o Ruby construção [inaudível]. O que usar PRF F é primo. Que actua sobre os blocos de tamanho dois sobre dois. Então, imagine por exemplo , no caso de cartão de crédito, t seria 42, porque dois dos 42 nós dissemos é o próxima potência de dois que é maior do que, que, de s. S é o número de crédito, número total de cartões de crédito. Então, vamos precisar de um PRF agora que atua em 21 byte entradas. Portanto, uma forma de fazer isso é simplesmente tomar a cifra de bloco AES, tratá-lo como um PRF em 128 entradas de bytes, e depois simplesmente truncar a saída para o mínimo significativo de 21 bytes. Ok, então que nos foi dado um valor de byte 21. Gostaríamos de acrescentar zeros a ele, para que cheguemos 128 bytes como resultado. Gostaríamos de aplicar AES para que e então seria truncar volta para 21 bytes. Agora eu devo te dizer que isso é realmente uma maneira simples de fazer isso, mas na verdade não é a melhor maneira de fazê-lo há maneiras realmente melhores para truncar um PRF. Em n bits para ap, PRF em dois mais de dois bits. Mas para os nossos fins, para efeitos deste segmento, o método de truncamento eu disse é bom o suficiente. Então vamos usar esse método particular. Ok, então agora, nós temos convertido nossa cifra de bloco AES em um PRF em dois mais de dois bits, digamos, em 21 bits. Mas o que realmente queremos é uma PRP. E assim o que vamos fazer é que vamos ligar nossa nova PRF, F privilegiada, diretamente na construção [inaudível]. Se você se lembra, este é basicamente uma construção fiestal. Dizemos isso, quando falamos sobre DES. Somente Luby-Rackoff usado três rodadas, e sabemos que este converte um PRF seguro em uma PRP seguro em duas vezes o tamanho do bloco. Em outras palavras, começamos a partir de um PRF seguro em 21 bits, e que nos dará e Luby-Rackoff nos dará uma PRF seguro em 42 bits, que é o que queríamos. Agora, devo dizer-lhe que os parâmetros de erro na construção [inaudível] não são tão bons quanto poderiam ser. E, de fato, um melhor coisa a fazer é usar sete rodadas de Fiestal. Em outras palavras, nós vamos fazer este sete vezes cada vez que vamos usar uma chave diferente. Então você notar, aqui, estamos usando apenas três teclas. Deveríamos estar usando deveríamos estar fazendo isso por sete vezes usando sete chaves diferentes. E depois há um bom resultado, devido a [inaudível], que mostra que a construção [inaudível], basicamente, tem como boa erro [inaudível] termos como possível. Assim, os termos de erro no teorema de segurança vai ser basicamente dois ao razoável T.. Portanto, agora temos uma permutação pseudo-aleatório que opera em estreita potência de dois para o valor de S. Mas isso não é bom o suficiente. Nós realmente deseja obter um pseudo-aleatório permutação no ponto zero de S menos um. Assim, dois passos nos levarão para baixo de zero para o T, para o ponto zero real para o S menos um que nós somos interessado polegadas E essa construção é, novamente, muito, muito bonito, então deixe-me mostrar como ele funciona. Então, novamente, nós estamos dando esta PRP, que opera em uma potência de dois. E nós queremos ir para baixo a um PRP, que opera em algo, um pouco menor. Ok, então aqui está sobre as obras de construção. Basicamente, nós estamos dando entrada do X nos conjuntos zero a S menos um que nós queremos. E o que vamos fazer é que vamos reiterar o seguinte procedimento novamente e novamente. Então, primeiro de tudo, mapear X em esta variável temporária Y. E agora estamos só vai criptografar a entrada X e colocar o resultado em Y. Se Y está dentro do nosso conjunto de destino, paramos e mostramos Y. Se novamente e novamente e novamente até que finalmente Y cai em nosso conjunto de destino e que a saída desse valor. Assim, em uma imagem, deixe-me explicar como isso funciona. Então, vamos começar de um ponto no nosso conjunto de destino. E agora, agora nós aplicar o, E a função e nós pode ser mapeado para este ponto fora de nosso alvo set, então nós não vamos parar. Então agora nós aplicamos a função E novamente, então poderíamos ser mapeados para esse ponto e agora vamos aplicar a função E mais uma vez e agora tudo de uma repente, mapear a este ponto, e então paramos, e que de saída do nosso. Ok, então que? é como nós mapear pontos entre de zero a S menos um, para outros pontos do zero a S menos um. Deve ser muito claro que esta é inversível. Para inverter, tudo o que eu vou fazer é que eu só descriptografar e caminhada, de certa forma, na direção oposta. Assim eu vou decifrar, e em seguida, descriptografar, e em seguida, descriptografar, até que finalmente, eu cai na conjunto, de zero a S menos um. E isso me dá o inverso do ponto que eu queria para. Portanto, este é, de fato, um PRP. A questão é se é uma PRP seguro, e veremos que em apenas um minuto. Mas antes disso, deixe-me perguntar, quantas iterações que você espera que vamos precisar? E eu quero lembrá-lo novamente, antes de eu lhe fazer essa pergunta, que, de fato, S é menor que dois para o T. Mas é mais do que dois para o T menos um. Assim, em particular, S é maior do que dois para o T mais de dois. E a minha pergunta para vocês agora é quantas iterações que vamos precisar de média. Até que esse processo converge. Portanto, a resposta é que nós vamos precisar de dois iterações, então realmente apenas um pequeno número constante de iterações. E assim este nos dará um mecanismo muito, muito eficiente, que vai nos mover para baixo de zero um ao T para zero para o S-1. Agora, quando falamos de segurança, verifica-se passo isso aqui é apertado. Em outras palavras, não há realmente nenhuma segurança adicional custo para ir para baixo a partir de dois para o T para zero para S-1. E a razão que é verdade, na verdade é novamente um teorema muito aguda para provar, mas eu, não vou fazê-lo aqui. Talvez eu vou deixá-lo como um exercício para vocês para discutir. Que diz que se você me der quaisquer dois conjuntos Y e X, em que Y está contido dentro de X, em seguida, aplicar a transformação que acabamos de ver a uma permutação aleatória de X para X realmente dá uma permutação aleatória de Y a Y. Então, isso significa que se começamos com uma verdadeira permutação aleatória de X, você vai acabar com uma permutação verdadeiramente aleatória Y. E desde, bem, a permutação estamos começando com é indistinguível aleatória X, vamos acabar com uma permutação que é indistinguível aleatória Y. Ok, então esta é uma construção muito apertado e como eu disse, o primeiro passo realmente é, basicamente, a análise é a mesma que a análise de Lou Rockoff B.. Em verdade, é melhor usar como eu disse, a análise Parthenon em sete rodadas. Assim realmente aqui, há um pouco de custo em segurança. Mas, em geral, temos um construção que é seguro para PRP efectivamente. Não tão boa segurança parâmetros, mas, no entanto, este é um bom PRP seguro de que podemos construir a realmente vai operar no intervalo de zero x menos um. Isto por sua vez vai permitir para encriptar números de cartão de crédito, que o texto cifrado se parece com um cartão de crédito número. E novamente, eu quero enfatizar que não há integridade aqui. O melhor podemos conseguir aqui é apenas a segurança CPU determinística. No texto cifrado , integridade e não aleatoriedade em tudo. Okay. Então isso conclui este módulo. E como habitual quero apontar para um material de leitura de que você pode dar uma olhada se você estiver interessado em aprender mais sobre tudo o que discutimos neste módulo. Então, primeiro de tudo, a construção HKDF que falamos para a derivação de chave é descrita em um artigo a partir de 2010 por Hugo Krawczyk. Criptografia determinístico, o modo SIV que descrevemos é discutido neste artigo aqui. O modo que ENE descrito que nos permite construir um, uma permutação [inaudível] pseudo-aleatório é descrito neste artigo aqui por [inaudível]. Tweakable cifras de bloco que realmente levou para o modo de operação XDS que é usado para criptografia de disco é descrito neste artigo aqui. E, finalmente, um formato de criptografia reservando é descrito neste último artigo que eu apontar para aqui. Ok então isso conclui este módulo. E no próximo módulo vamos começar a olhar para como fazer troca de chaves.