Certamente todos viram na televisão e na internet fotografias de pessoas, especialmente embaçadas para esconder o rosto. Por exemplo, Bill Gates:
Na maioria das vezes, isso funciona porque não há uma maneira conveniente de reverter o desfoque em uma foto suficientemente detalhada para reconhecer um rosto. Então, com rostos, está tudo bem. No entanto, muitos recorrem a desfocar
números e
textos confidenciais. Vou mostrar por que essa é uma péssima idéia.
Suponha que alguém postou uma foto de seu cheque ou cartão de crédito na Internet por algum motivo terrível (provar no fórum que ele ganhou um milhão de dólares ou mostrou algo engraçado, ou comparou o tamanho de algo com um cartão de crédito etc.) .), desfocou a imagem usando um efeito mosaico muito comum para ocultar os números:
Parece seguro porque ninguém vai ler os números? RESPOSTA ERRADA. Há um ataque a este esquema:
Etapa 1. Obtenha uma imagem de verificação limpa
Existem duas maneiras de fazer isso. Você pode remover os números em um editor gráfico ou abrir uma conta no mesmo banco e fotografar seu próprio cartão do mesmo ângulo, combinar equilíbrio de branco e contraste. Em seguida, remova os números dele em um editor gráfico (em uma foto de alta resolução, isso é mais fácil de fazer).
Em nossos exemplos, é claro, isso é feito facilmente:
Etapa 2. Iterações
Use um script para percorrer todos os números de conta possíveis e criar uma verificação para cada um, separando grupos de números. Por exemplo, nos cartões VISA, os números são agrupados por 4, para que você possa processar cada seção individualmente. Isso requer apenas 4 × 10.000 = 40.000 imagens, o que é facilmente gerado pelo script.
Etapa 3. Desfoque cada imagem idêntica à original
Determine o tamanho exato e o deslocamento de pixel dos mosaicos usados para desfocar a imagem original (fácil) e faça o mesmo com cada uma das imagens desfocadas. Nesse caso, vemos que a imagem tremida consiste em um mosaico de 8x8 pixels e o deslocamento é determinado contando a partir da borda superior da imagem (não mostrada):
Agora, classificamos todas as imagens, desfocando-as da mesma forma que a original e obtemos algo assim:
Etapa 4. Determine o vetor de brilho do mosaico de cada imagem borrada.
O que isso significa? Bem, vamos pegar a versão em mosaico 0000001 (aumentada):
... e determine o nível de brilho (0-255) de cada área do mosaico, nomeando-os de maneira consistente como
:
Nesse caso, o número da conta 0000001 cria um vetor de brilho do mosaico
. Encontramos o vetor de brilho do mosaico para cada número de conta da mesma maneira, usando um script para desfocar cada imagem e ler o brilho. Vamos
- função do número da conta
. Então
denota o valor i-ésimo vetor do vetor de brilho do mosaico
obtido do número da conta
. Acima
.
Agora, fazemos o mesmo com a imagem de referência original que encontramos na Internet ou em qualquer lugar, obtendo um vetor que chamaremos aqui
:
Etapa 5. Encontre o mais próximo da imagem original.
Defina o vetor de brilho do mosaico da imagem original, vamos chamá-lo
e calcule a distância de cada número de conta (indicado por
) para o vetor de brilho do mosaico (após normalização):
onde
N(a(x))
e
N(z)
são as constantes de normalização dadas
Agora basta encontrar o menor
. Para cartões de crédito, apenas uma pequena parte dos números possíveis confirma os números hipotéticos possíveis de cartões de crédito; portanto, também não há nada complicado aqui.
Por exemplo, no nosso caso, calculamos
e prossiga para calcular as distâncias:
Talvez o número da conta corresponda ao mosaico 1124588?
"Mas você usou sua própria imagem, o que é fácil de decifrar!"
No mundo real, fotos reais, não exemplos fictícios tirados no Photoshop. Temos distorção de texto devido ao ângulo da câmera, alinhamento imperfeito e assim por diante. Mas isso não impede que uma pessoa determine com precisão o tipo de distorção e crie um script apropriado! De qualquer forma, algumas distâncias mínimas definidas podem ser consideradas como candidatas, e especialmente no mundo dos cartões de crédito, onde os números são lindamente divididos em grupos de 4, e apenas 1 em cada 10 números é realmente um número válido, o que facilita a escolha dentre as mais prováveis. candidatos.
Para realizar isso em fotografias reais, o algoritmo de distância deve ser aprimorado. Por exemplo, você pode reescrever a fórmula da distância acima para normalizar os desvios padrão, além da média. Você também pode processar independentemente os valores RGB ou HSV para cada área do mosaico, bem como usar scripts para distorcer o texto em vários pixels em cada direção e comparar (o que ainda deixa um número completamente limitado de comparações em um PC rápido). Você pode usar algoritmos semelhantes aos algoritmos vizinhos mais próximos existentes para aumentar a confiabilidade do trabalho em fotografias reais.
Então, sim, usei minha imagem e a adaptei para este caso. Mas o algoritmo certamente pode ser aprimorado para uso no mundo real. Mas não tenho tempo nem desejo de melhorar nada, porque não busco suas informações. Mas uma coisa é certa: esta é uma situação muito simples. Não use mosaicos simples para desfocar a imagem. Tudo o que você faz é reduzir a quantidade de informações na imagem que contém tudo
bits efetivos de dados da conta. Ao distribuir essas imagens, você deseja
eliminar as informações pessoais em vez de obstruir o acesso a elas, reduzindo a quantidade de informações visuais.
Imagine uma imagem gráfica de 100 × 100. Suponha que apenas calcule a média dos pixels e substitua cada um deles por um valor médio (ou seja, transformei a imagem em um "mosaico" de pixel único). Você acabou de criar uma função que, de 256 ^ (10000) variantes, hash até 256 variantes. Obviamente, com os 8 bits recebidos, você não poderá restaurar a imagem original. Mas se você souber que, no total, existem 10 opções para a imagem original, usando esses 8 bits você poderá determinar facilmente qual foi usada.
Analogia de ataque de dicionário
A maioria dos administradores de sistema UNIX / Linux sabe que as senhas em / etc / passwd ou / etc / shadow são criptografadas com uma função unidirecional, como Salt ou MD5. Isso é bastante seguro, pois ninguém pode descriptografar a senha olhando seu texto criptografado. A autenticação ocorre executando a mesma criptografia unidirecional da senha inserida pelo usuário ao entrar no sistema e comparando esse resultado com o hash salvo. Se eles corresponderem, o usuário passou no teste com sucesso.
É sabido que um esquema de criptografia unidirecional é interrompido facilmente quando um usuário seleciona uma palavra do dicionário como uma senha. Tudo o que o invasor precisa fazer é criptografar todo o dicionário em inglês, comparar o texto criptografado de cada palavra com o texto criptografado armazenado em / etc / passwd e selecionar a palavra correta como senha. Portanto, os usuários geralmente são aconselhados a escolher senhas mais complexas que não sejam palavras. Um ataque de dicionário pode ser ilustrado da seguinte maneira:

Da mesma forma, o desfoque de imagem é um esquema de criptografia unidirecional. Você converterá a imagem que você possui em outra imagem destinada à publicação. Mas como os números das contas geralmente não excedem milhões, podemos compilar um “dicionário” de números possíveis. Por exemplo, todos os números são de 0000001 a 9999999. Em seguida, inicie o processamento automático, que coloca cada uma dessas imagens em uma foto de fundo vazio - e desfoque cada imagem. Resta apenas comparar os pixels borrados e ver quais opções mais se aproximam do original.
Solução
A solução é simples: não desfoque imagens! Em vez disso, basta pintar sobre eles:
Lembre-se de que deseja remover completamente as informações e não reduzi-las, como em uma foto borrada.