Executando verificação de segurança...
3

Recentemente eu estava pensando exatamente nessa questão. Não sabia dos nomes exatos de alguns termos que você usou, mas tenho alguma noção dos conceitos principais. Estava pensando em fazer um banco de dados pra lidar somente com dados sensíveis. Ele usaria um esquema de rotação de chaves derivadas de uma chave mestre que fica em armazenada em um lugar sem conexão com a internet. Essas chaves são rotacionadas semanalmente (elas são geradas previamente por um algoritmo). Dai pra armazenar essas chaves seria usado uma blockchain que guarda partes dessas chaves de em blocos não ligados de forma consecutiva (a ideia seria fazer um tipo de randomização aqui). (Nessa parte eu também pensei em guardar os dados em si dessa forma, quebrando eles em blocos de binários e randomizando na blockchain, mas acho que algo assim, apesar de poder funcionar, gera tradeoffs colaterais, que dificultam o gerenciamento dos dados - mas que também é possível resolver). Enfim, viajei bastante nisso, dai vi que tem algumas soluções que fazem mais ou menos isso:

BlockchainDB e Storj.

Seria um projeto interessante, e talvez fosse bem útil pra outras pessoas e empresas. Cheguei a pensar nisso porque estou querendo resolver outro problema, dai queria ter um banco de dados bem seguro e vi que as soluções que tem hoje não fazem troca de chaves de criptografia (recriptografar os dados) de forma automatizada. Seria interessante. Claro que um sistema como esse exigiria um alto grau de computação por ter recriptografia sendo feita, mas acho que o esquema de blockchain e distribuição de trabalho poderia ser usado também aqui nesse caso pra conseguir fazer isso de forma rápida (paralelismo e assincronismo). Enfim, uma ideia bacana, mas ainda precisaria ser analisados vários pontos.

Carregando publicação patrocinada...
2

Concordo contigo, viniciusbrito, é uma ideia bacana mas ainda carece que vários pontos sejam reavaliados com mais cuidado. Inclusive, na matéria que cita a postagem principal, escrevem (lá em 2018) que:

Anonymizing data is extremely hard and most of us are doing it wrong. To me, it feels like we're back in the era before bcrypt, where everyone was charting their own course on how to store passwords in databases.

I think that as an industry, we need to be aware that cryptography is not anonymity, and there doesn't yet exist a right answer, library, or tool, to simply apply to your anonymization problem (without in-depth knowledge).
Fonte: https://goteleport.com/blog/hashing-for-anonymization

Ou seja, o processo de anonimização é difícil e muitos estão realizando esse processo de maneira incorreta (segundo a matéria). Segundo os comentários que li, parecem confundir criptografia e anonimização. Enquanto no primeiro o conteúdo do pacote de dados existente é reversível com uso das chaves corretas, no segundo é teoricamente irreversível. A possibilidade remota de recriação do pacote de dados inexistente por completo, via força bruta, vai precisar contar com as vulnerabilidades conhecidas, dicas, além arcar com os custos elevados de computação. Entendo que anonimização em computação deveria algo semelhante a incinerar um documento ou mesmo transformá-lo em pasta de celulose para gerar papel reciclável.

Não penso levar a ideia em diante, viniciusbrito, entretanto faço experimentos quando posso para entender esses artifícios e suas vulnerabilidades após me espantar com os processos que facilitaram os vazamento de dados. Todas as vezes que tento criar uma "criptografia nova" vem um anjinho me lembrar do conselho de vários especialistas da área. O resultado pode ficar parecido com isso e não funcionar! Aprecio a discussão para trocar ideias sobre o que os desenvolvedores pensam a respeito e quão preocupados estão em proteger nossos dados pessoais, transações etc. Acredito que a próxima geração já estará ciente de que os dados são dos clientes, diferente como pensa uma pequena parte da geração atual de profissionais que acreditam ser donos do DB e seu conteúdo. Na ocorrência de vazamento de dados, o estagiário é o culpado 8-) pela imperícia (a ação equivocada por falta de técnica, de inaptidão), imprudência (a ação sem cautela), negligência (a omissão da conduta esperada para uma determinada situação), irresponsabilidade (característica da pessoa a quem não se deve conceder responsabilidade pela realização de alguma ação ilegal) do superior ao deixar informações sensíveis sob os cuidados de quem não deveria sequer ter acesso a elas.

PS: Ainda não descobri o CPF que o rafael cita após passar pela função de hash SHA1. Alguém descobriu por força bruta?

Como exemplo, vamos considerar "anonimizar" um SSN (algo como nosso CPF, porém secreto) utilizando o SHA-1. Essa função retornará uma string similar à b0254c86634ff9d0800561732049ce09a2d003e1. Um SSN é composto por 9 números, então é bem diferente do resultado do SHA-1.

1

PS: Ainda não descobri o CPF que o rafael cita após passar pela função de hash SHA1. Alguém descobriu por força bruta?

Eu não tive o trabalho de fazer isso! Hahaha. O SHA-1 foi copiado diretamente do artigo. Veja o texto original:

If you hash my SSN, the result is b0254c86634ff9d0800561732049ce09a2d003e1.

Então realmente não é um CPF.

Clique aqui para ver o que o hash representa.

Conforme o próprio artigo:

[In case you’re wondering, the b02 value is not really the hash of my SSN. It is the hash of the text string “my SSN”. There is no way I would publish the hash of my actual SSN.]

1

Agradeço o esclarecimento, rafael!!


Aproveitando, agradeço também a dica, pois a partir de sua mensagem original aprendi a usar o recurso details:summary. Ainda apanhando um pouco aqui para dar uma "repaginada" nos contéudos que escrevi. Uma postagem com muitas imagens, listas, gerava um impacto negativo (texto muito carregado) para quem as acessava.

Estou deixando explícito o código markdown para outros leigos, como eu, interessados em encurtar suas longas publicações, pelo menos as seções de bla-bla-bla (no bom sentido), opiniões e animações que tiram a atenção do leitor.

O código acima deve gerar algo parecido com isso:

<details>
    <summary>Um texto de chamada</summary>

Um texto.
> Uma citação _ipsis litteris_, por exemplo.
    
</details>

O código acima deve gerar algo parecido com isso:

Um texto de chamada

Um texto.

Uma citação ipsis litteris, por exemplo.