역암호화된gem lockbox의 버튼 연결에 걸려 넘어진 일

안녕하세요.
최근 프로젝트에서는 은밀한 정보를 처리해 데이터베이스에 역암호화해 저장하기로 했다.
최초 사용 예정ActiveSupport::MessageEncryptor
나는 기술 고문과 상의했다
"Message Enceryptor를 사용하는 것이 좋을 것 같지만 요소안 사용이 번거롭기 때문에 Gem을 사용하는 것이 좋을 것 같아요."
이런 건의를 받았다.
확실히 모든 기록은salt를 저장해야 하며 암호화와 복호화는 몇 가지 절차를 필요로 하여 사람들에게 사용하기 어려운 인상을 준다.
소개된gem에서 사용하기로 결정lockbox.
여기서는 버튼 로테이션이 필요한데, 실행에 당혹스러워 메모로 소개하려고 한다.

이유를 선정하다


일단 락박스를 선택한 이유는요.
  • 유지되는 정보는 Masterkey만 사용할 수 있고 환경 변수로 사용할 수 있다
  • 암호화와 복호화
  • 개발 활성화
  • 그런 게 있어요.
    사용법은 README보시면 충분합니다.
    대강 한 차례 설명하다
  • Masterkey를 생성하여 응용 프로그램이 읽을 수 있는 형식으로 설정
  • 암호화할 attribute 이름 + ciphertext열을 표에 추가
  • 모델에 추가encrypts <暗号化したいattribute名>
  • 이후 평소대로 읽기
  • 이런 식으로.

    암호화된 열 이름을 변경할 때


    이번 개발 과정에서 암호화된 열 이름이 변경되었습니다.
    이렇게 변경하기 전에 저장한 데이터는 디코딩할 수 없다.
    그때는 버튼 로테이션을 하는데 그 방법으로 잡았어요.
    Key Rotation
    README
    class User < ApplicationRecord
      encrypts :email, previous_versions: [{key: previous_key}]
    end
    
    및 설명, previous키에 변경 사항을 넣기 전의 마스터키도 순조롭지 못했다.
    사실 이 키는 마스터키가 아니에요.
    암호화열마다lockbox
  • Masterkey
  • 표 이름
  • 열 이름
  • 의 세 키는 각각의 키를 생성하고 암호화/복호화합니다.
    Lockbox.attribute_key(table: "users", attribute: "email_ciphertext")
    
    Master key
    그래서 이 상황에서 프리뷰스.키
    Lockbox.attribute_key(table: "<テーブル名>", attribute: "<変更前のカラム名>")
    
    .

    끝말


    앱을 만들려면 은밀성이 높은 정보를 저장해야 한다는 장면이 있다고 생각해요.
    그때 이lockbox를 사용해서 선택항목에 들어갈 수 있었으면 좋겠어요.
    아직 lockbox를 능숙하게 사용할 수 없기 때문에 새로운 발견이 있으면 알려드리고 싶습니다.
    그럼 이따 봐요!

    좋은 웹페이지 즐겨찾기