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