- 암호화만 할 수 있고 복호화할 수 없는 암호화 기술을 의미합니다. 즉, 암호화된 데이터를 원래의 평문으로 되돌릴 수 없는 방식의 암호화를 의미합니다. - 해당 암호화 과정에서 정보가 손실되기에 한번 해시 함수를 거친 데이터는 복호화가 불가능합니다. - 단방향 암호화는 데이터의 기밀성보다는 무결성과 인증을 보장하는데 중점을 둡니다
2. 대칭형 암호(=비공개 키 암호화)
💡 대칭형 암호(=비공개 키 암호화)
- 평문 데이터를 암호화하거나 복호화할 때 ‘동일한 키’를 사용하는 암호화 방식을 의미합니다. - 이 방식에서는 송신자와 수신자가 동일한 비밀 키를 공유해야 하며, 이를 이용하여 데이터를 암호화, 복호화합니다. - 대표적인 대칭형 암호화 알고리즘으로는 AES, DES, 3DES 등이 있습니다.
3. 비 대칭형 암호화(=공개 키 암호화)
💡 비 대칭형 암호화(=공개 키 암호화) - 평문 데이터를 암호화할 때와 복호화할 때 ‘서로 다른 암호화 키’를 사용하는 암호화 방식을 의미합니다. - 이 방식에서는 누구나 접근이 가능한 ‘공개 키’로 암호화를 하며, 특정 개인이 가지고 있는 ‘비밀 키’로만 복호화가 가능합니다. - 대표적인 비 대칭형 알고리즘으로는 RSA, DSA, ECC 등이 있습니다.
2) 설치 방법
1. 설치를 합니다
💡 설치를 합니다.
- 설치를 할 때, public 스키마가 아닌 지정된 스키마로 되어 있는지 확인해야 합니다. 일반적으로 실행을 하면 public 스키마에 확장이 설치가 됩니다.
# 확장 추가
CREATE EXTENSION IF NOT EXISTS pgcrypto;
# or
# 확장 제거
DROP EXTENSION IF EXISTS pgcrypto;
2. 스키마 단위에서 Extension을 확인하여 설치 확인을 할 수 있습니다.
💡 [참고] 아래와 같이 SQL문으로 확인이 가능합니다.
3) 주요 함수
1. pgcrypto 제공 함수
카테고리
함수
설명
반환 타입
General Hashing
digest(data text, type text)
해시값 생성 (md5, sha1, sha224, sha256, sha384, sha512 + OpenSSL 지원 알고리즘)
bytea
digest(data bytea, type text)
바이너리 데이터 해시
bytea
hmac(data text, key text, type text)
키 기반 MAC 해시
bytea
hmac(data bytea, key bytea, type text)
바이너리 키 기반 MAC 해시
bytea
Password Hashing
crypt(password text, salt text)
crypt(3) 스타일 패스워드 해싱/검증
text
gen_salt(type text [, iter_count integer])
솔트 생성 (des, xdes, md5, bf, sha256crypt, sha512crypt)
text
PGP 대칭키
pgp_sym_encrypt(data text, psw text [, options text])
PGP 대칭키 암호화
bytea
pgp_sym_encrypt_bytea(data bytea, psw text [, options text])
바이너리 PGP 대칭키 암호화
bytea
pgp_sym_decrypt(msg bytea, psw text [, options text])
PGP 대칭키 복호화
text
pgp_sym_decrypt_bytea(msg bytea, psw text [, options text])
- 이메일을 ASE256으로 암호화하여 저장하고, 불러오는 과정을 SQL문에서 수행하도록 처리합니다
1. 현재 사용자 데이터 확인
💡 현재 사용자 데이터 확인
- 아래와 같은 간단한 TB_USER 테이블이 있습니다. - 해당 컬럼 중에서 user_email 컬럼에 ASE256 암호화/복호화를 이용할 예정이며, 이를 위해서는 BYTEA 타입으로 지정을 해야 합니다.
컬럼명
NULL
PK
FK
기본 값
설명
USER_SQ
BIGSERIAL
N
✅
AUTO INCREMENT
사용자 시퀀스 (PK)
USER_ID
VARCHAR(50)
N
-
사용자 사번
USER_EMAIL
BYTEA
N
사용자 이메일
USER_PW
VARCHAR(255)
N
-
비밀번호
USE_YN
BOOLEAN
N
TRUE
사용여부
REG_TS
TIMESTAMP
N
NOW()
생성일시
MOD_TS
TIMESTAMP
N
NOW()
수정일시
💡 ASE256 암호화의 함수의 데이터 구조
# ASE256의 암호화(입력 TEXT -> 출력 BYTEA)
pgp_sym_encrypt(data text, psw text [, options text ]) returns bytea
# ASE256의 암호화(입력 BYTEA -> 출력 BYTEA)
pgp_sym_encrypt_bytea(data bytea, psw text [, options text ]) returns bytea
# ASE256의 복호화(입력 BYTEA -> 출력 TEXT)
pgp_sym_decrypt(msg bytea, psw text [, options text ]) returns text
# ASE256의 복호화(입력 BYTEA -> 출력 BYTEA)
pgp_sym_decrypt_bytea(msg bytea, psw text [, options text ]) returns bytea
https://postgresql.kr/docs/11/pgcrypto.html
2. 데이터 암호화 및 INSERT
💡 데이터 암호화 및 INSERT - 위에 데이터구조 형태로 예시로 데이터를 INSERT 합니다.