класс ActiveRecord::Encryption::EnvelopeEncryptionKeyProvider
Реализует простой подход к шифрованию оболочкой, где:
-
Он генерирует случайный ключ шифрования данных для каждой операции шифрования
-
Он хранит сгенерированный ключ вместе с зашифрованной полезной нагрузкой. Он шифрует этот ключ с помощью основного ключа, указанного в credential +active_record.encryption.master key+
Этот поставщик может работать с несколькими основными ключами. Он будет использовать последний для шифрования.
Когда `config.store_key_references` имеет значение true, он также будет хранить ссылку на конкретный основной ключ, который использовался для шифрования ключа шифрования данных. Если не задано, он будет перебирать все настроенные основные ключи, чтобы найти нужный и вернуть соответствующий ключ расшифрования.
Публичные методы экземпляров
# File activerecord/lib/active_record/encryption/envelope_encryption_key_provider.rb, line 31 def active_primary_key @active_primary_key ||= primary_key_provider.encryption_key end
# File activerecord/lib/active_record/encryption/envelope_encryption_key_provider.rb, line 26 def decryption_keys(encrypted_message) secret = decrypt_data_key(encrypted_message) secret ? [ActiveRecord::Encryption::Key.new(secret)] : [] end
# File activerecord/lib/active_record/encryption/envelope_encryption_key_provider.rb, line 18
def encryption_key
random_secret = generate_random_secret
ActiveRecord::Encryption::Key.new(random_secret).tap do |key|
key.public_tags.encrypted_data_key = encrypt_data_key(random_secret)
key.public_tags.encrypted_data_key_id = active_primary_key.id if ActiveRecord::Encryption.config.store_key_references
end
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.