class ActiveRecord::Encryption::EnvelopeEncryptionKeyProvider
Реализует простой подход к конвертному шифрованию, при котором:
-
Для каждой операции шифрования генерируется случайный ключ шифрования данных.
-
Сгенерированный ключ сохраняется вместе с зашифрованными данными. Этот ключ шифруется главным ключом, указанным в учётных данных
active_record_encryption.primary_key.
Этот поставщик может работать с несколькими главными ключами. Для шифрования он будет использовать последний ключ.
Если значение config.active_record.encryption.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.