Criptografia ActiveRecord
O curso trata de ActiveRecord::Encryption, que criptografa valores dentro da aplicação Rails, e por isso um SELECT simples no banco devolve texto cifrado. A primeira aula compara isso com a criptografia de disco em repouso. Depois as chaves são geradas com bin/rails db:encryption:init e guardadas nas credentials. As aulas mostram o que encrypts grava na coluna, por que find_by devolve nil numa coluna criptografada no modo padrão e como deterministic: true mantém a coluna consultável, com um custo. Também tratam da migração de linhas em texto simples e da perda da chave.
O que você vai aprender
- ✓A diferença entre criptografar no app Rails e criptografar o disco em repouso
- ✓Gerar chaves com bin/rails db:encryption:init e guardá-las nas credentials
- ✓O que encrypts grava na coluna e por que colunas no modo padrão não podem ser consultadas
- ✓Usar deterministic: true e downcase: true em colunas que precisam de busca
- ✓Migrar linhas em texto simples com support_unencrypted_data e find_each(&:encrypt)
- ✓Por que uma chave perdida ou trocada torna os dados criptografados irrecuperáveis
Por que criptografar no app, não só em repouso
Todo curso de migrations até aqui perguntou como as tabelas se relacionam, quão segura é uma operação numa tabela em uso ou como ordenar várias mudanças. Este curso pergunta outra coisa. A questão não é o formato de uma coluna nem com o que ela se relaciona. É o que é seguro guardar nela como texto…
Ler a aula completa grátis →Currículo
7 aulasPor que criptografar no app, não só em repouso
Compara a criptografia de disco em repouso com a feita dentro do app Rails, usando Partners::Inquiry como exemplo.
Configuração: db:encryption:init e credentials
Gera três chaves com bin/rails db:encryption:init, guarda as chaves nas credentials e explica o papel de cada uma.
encrypts, e a coluna que não pode ser consultada
Mostra o texto cifrado em JSON que encrypts guarda e por que o IV aleatório faz find_by devolver nil.
deterministic: true: uma coluna que continua consultável
Usa deterministic: true e downcase: true para manter o find_by funcionando, ao custo de expor valores iguais.
support_unencrypted_data: migrando sem downtime
Acrescenta criptografia a uma coluna com linhas em texto simples via support_unencrypted_data e termina com find_each(&:encrypt).
Perder a chave é perder o dado
Mostra que mudar o primary_key deixa os valores criptografados ilegíveis, com erro de Decryption e nenhuma recuperação parcial.
Juntando tudo: escolhendo por coluna
Aplica cada aula a Partners::Inquiry, decidindo por coluna o que criptografar, de que jeito e o que deixar como está.