Ruby on Rails - почему определенные данные должны быть зашифрованы?

Шифрование данных

Закончив добавление attr_encrypted к некоторым моделям, я пришел к выводу, что работа хакеров может быть не такой сложной.

У меня есть база данных на сервере, отличном от серверов приложений, но есть вероятность, что если кому-то удастся получить доступ к серверу БД, он также сможет получить доступ к серверу приложений, где хранятся ключи (возможно, это неверное предположение), поскольку они имеют такие же меры безопасности.

вопрос

Код Rails хранится в читаемом текстовом формате на сервере, поэтому к секретным ключам можно получить доступ. Конечно, если кто-то овладел базой данных и удерживает эти ключи, все шифрование данных становится неактуальным, поскольку оно просто (немного) продлевает время хакеров для расшифровки информации.

Если да, можно ли предпринять дальнейшие меры безопасности или я полностью пропустил концепцию шифрования?

Я осмотрел гем attr_encrypted и связанные с ним readme и вопросы, но не смог найти ничего полезного.

2 ответа

attr_encrypted защищает ваши данные от простых утечек данных. Подумайте, что АНБ прослушивает кабель между DC (куда будут отправляться ваши журналы репликации БД) или недовольный администратор БД (не имеющий доступа к источнику приложения), сбрасывающий все ваши данные в интернет.

Если это фактическое нарушение, злоумышленники могут не получить доступ как к коду приложения, так и к базе данных (зависит от вашей архитектуры и мер безопасности). Если у них есть оба, тогда да, игра окончена.

В общем, лучше иметь его [для конфиденциальных данных], чем не иметь. Не больно, я бы сказал.

Не помещайте ключи в сервер приложений и не регистрируйте их в репозитории git.

Вместо этого используйте переменные среды. Вы можете иметь разные подходы для разработки и производства.

Очень легко сделать на Heroku (например).

У меня есть проблема с шифрованием:

# app/models/concerns/encryption.rb

module Encryption

  extend ActiveSupport::Concern

  module ClassMethods
    def encryption_key
      ENV['ENCRYPT_KEY']
    end
  end

end

В модели я делаю это

class User < ActiveRecord::Base

  include Encryption
  attr_encrypted :name, :key => encryption_key

end

В разработке я использую .env файл для хранения ключей и получения с помощью мастера.

Другие вопросы по тегам