IFieldEncryptor.cs 1.2 KB

12345678910111213141516171819202122232425262728
  1. namespace Application.Abstractions.Crypto;
  2. /// <summary>
  3. /// 회원 PII(주소·연락처·수령인명 등) 필드 단위 암호화.
  4. /// 운영 정책: AES-GCM 256bit. 키는 appsettings 의 Encryption.Keys 딕셔너리에서 KeyVersion 으로 매핑.
  5. /// 키 회전 지원: 신규 암호화는 항상 CurrentKeyVersion 사용, 복호화는 row 의 KeyVersion 으로 과거 키 매핑.
  6. /// </summary>
  7. public interface IFieldEncryptor
  8. {
  9. /// <summary>현재 사용 중인 키 버전. 신규 암호화 시 row 에 함께 저장.</summary>
  10. int CurrentKeyVersion { get; }
  11. /// <summary>
  12. /// 평문을 현재 키 버전으로 암호화. 반환값 형식: Base64(nonce 12B + ciphertext + tag 16B).
  13. /// </summary>
  14. string Encrypt(string plaintext);
  15. /// <summary>
  16. /// 지정된 키 버전으로 복호화. row 의 KeyVersion 컬럼 값을 그대로 전달.
  17. /// </summary>
  18. string Decrypt(string ciphertextBase64, int keyVersion);
  19. /// <summary>
  20. /// 검색용 SHA-256 hex 해시. 동일 평문 -> 동일 해시 (deterministic).
  21. /// 회원 주소 검색(수령인명 일치 등) 시 사용. 키와 무관 — 키 회전 영향 없음.
  22. /// </summary>
  23. string Hash(string plaintext);
  24. }