레일즈 애플리케이션에서 필드 레벨 암호화를 위해 attr_encrypted 보석을 사용할 것을 고려하고 있습니다. 이 보석과 함께 사용할 암호화 키는 어떻게 생성합니까?attr_encrypted와 함께 사용할 암호화 키를 생성하는 방법
업데이트 :
attr_encrypted에서 사용하는 기본 암호화입니다 Encryptor에 대한 문서는 다음과 같은 상태 (사용에서 | 기본을) :
secret_key = Digest::SHA256.hexdigest('a secret key')
encrypted_value = Encryptor.encrypt('some string to encrypt', :key => secret_key)
내가 a secret key
은 임의 될 수 있음을 추측 할 -length random string이고 hexdigest
에 대한 호출은 적절한 고정 길이 문자열을 계산합니다. 이것을하는 것이 권장되는 방법입니까?
답변을 시도했지만 질문이 있습니다. 누가 (또는 어떤 시나리오가) 평문 데이터를 비밀로 유지하려고합니까? –
데이터베이스의 특정 필드는 주로 오프 사이트 백업 용도 (오프 사이트 백업 시스템에서 암호화 키에 액세스 할 수없는 경우)를 위해 안정적으로 암호화되어야합니다. –
그런 경우, 오프 사이트 시스템이 데이터에 액세스 할 수 있지만 구성 또는 소스 코드에 액세스하지 못했을 것이라고 추측 할 수 있습니까? 아마도 키의 적어도 일부를 저장하는 설정을 잘못하고, 올바른 키를 가져 오는 방법으로 전화를 걸 수있는 보석의 기능을 사용합니다. 그러나 소스 코드가 백업 데이터와 독립적으로 보호되는 경우 , 필드 당 암호화 키의 하드 코딩도 실행 가능합니다. –