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.