thepgcrypto
모듈은 윈 토토 함수를 제공합니다postgresql.
digest ()
다이제스트 (데이터 텍스트, 텍스트 유형)는 BYTEA를 반환합니다
지정된 이진 해시를 계산합니다데이터
.type
사용할 알고리즘입니다. 표준 알고리즘은MD5
,SHA1
,SHA224
,SHA256
,SHA384
andSHA512
. 만약에pgcrypto
OpenSSL로 제작되었으며 자세히 설명 된대로 더 많은 알고리즘을 사용할 수 있습니다.테이블 F.20.
다각형 문자열로 다이제스트를 원한다면encode ()
결과. 예를 들어:
함수 생성 또는 교체 SHA1 (BYTEA) 텍스트를 $$로 반환합니다
함수crypt ()
andgen_salt ()
암호 해싱 용으로 특별히 설계되었습니다.crypt ()
해싱 및gen_salt ()
알고리즘 매개 변수 준비.
알고리즘crypt ()
다음과 같은 일반적인 MD5 또는 SHA1 해싱 알고리즘과 다릅니다 :
느린다. 데이터의 양이 너무 작기 때문에 이것은 무차별 대결 암호를 어렵게 만드는 유일한 방법입니다.
그들은 random 값을 사용합니다.SALT, 동일한 비밀번호를 가진 사용자가 윈 토토 된 암호가 다릅니다. 이것은 또한 알고리즘을 뒤집는 것에 대한 추가 방어입니다.
결과에 알고리즘 유형이 포함되어 있으므로 다른 알고리즘으로 해시 된 암호는 공존 할 수 있습니다.
그중 일부는 적응력이 있습니다. 즉, 컴퓨터가 더 빨라질 때 기존 비밀번호와 비 호환성을 도입하지 않고도 알고리즘을 느리게 조정할 수 있습니다..
테이블 F.17crypt ()
기능.
표 F.17.지원되는 알고리즘crypt ()
알고리즘 | 최대 비밀번호 길이 | 적응 형? | 소금 비트 | 출력 길이 | 설명 |
---|---|---|---|---|---|
BF |
72 | 예 | 128 | 60 | Blowfish-Based, Variant 2A |
MD5 |
무제한 | 아니요 | 48 | 34 | MD5 기반 Crypt |
XDES |
8 | 예 | 24 | 20 | 확장 des |
des |
8 | 아니오 | 12 | 13 | 원래 Unix Crypt |
crypt ()
crypt (비밀번호 텍스트, 소금 텍스트) 텍스트를 반환
암호 계산 (3)-스타일 해시비밀번호
. 새 비밀번호를 저장할 때 사용해야합니다.gen_salt ()
새로운 생성SALT
값. 비밀번호를 확인하려면 저장된 해시 값을 전달합니다.SALT
, 결과가 저장된 값과 일치하는지 여부를 테스트합니다.
새 비밀번호 설정의 예 :
업데이트 ... set pswhash = crypt ( 'new password', gen_salt ( 'md5'));
인증의 예 :
PSWMATCH로서 ...
이것은 반환true
입력 된 암호가 올바른 경우.
gen_salt ()
gen_salt (텍스트 유형 [, iter_count integer]) 텍스트를 반환
crypt ()
. 소금 끈도 말해crypt ()
사용할 알고리즘.
the타입
매개 변수 해싱 알고리즘을 지정합니다. 허용 된 유형은 다음과 같습니다.des
,XDES
,MD5
및bf
.
theiter_count
매개 변수를 사용하면 사용자가 반복 카운트를 지정할 수 있습니다. 카운트가 높을수록 비밀번호를 해시하는 데 더 많은 시간이 걸리므로 더 많은 시간이 걸립니다.iter_count
매개 변수가 생략되고 기본 반복 카운트가 사용됩니다. 허용 값iter_count
알고리즘에 의존하고테이블 F.18.
테이블 F.18.반복 카운트crypt ()
알고리즘 | 기본값 | Min | max |
---|---|---|---|
XDES |
725 | 1 | 16777215 |
bf |
6 | 4 | 31 |
forXDES
반복 카운트가 홀수 숫자 여야한다는 추가 제한이 있습니다.
적절한 반복 수를 선택하려면 원래 DES 암호가 해당 하드웨어에서 초당 4 개의 해시 속도를 갖도록 설계되었음을 고려하십시오. 초당 4 해시보다 느리면 유용성이 약화 될 수 있습니다.
테이블 F.19다른 해싱 알고리즘의 상대 속도가 느려지는 개요를 제공합니다. 이 표는 암호에 소문자 또는 소문자 문자 및 숫자 만 포함되어 있다고 가정 할 때 8 자 암호로 문자의 모든 조합을 시도하는 데 얼마나 많은 시간이 걸리는지 보여줍니다.crypt-bf
항목, 슬래시 후 숫자는입니다.iter_count
매개 변수gen_salt
.
표 F.19.해시 알고리즘 속도
알고리즘 | 해시/초 | for[A-Z] |
for[A-ZA-Z0-9] |
기간에 대한 기간MD5 HASH |
---|---|---|---|---|
crypt-bf/8 |
1792 | 4 년 | 3927 년 | 100k |
crypt-bf/7 |
3648 | 2 년 | 1929 년 | 50k |
crypt-bf/6 |
7168 | 1 년 | 982 년 | 25K |
crypt-bf/5 |
13504 | 188 일 | 521 년 | 12.5K |
crypt-md5 |
171584 | 15 일 | 41 년 | 1K |
crypt-des |
23221568 | 157.5 분 | 108 일 | 7 |
SHA1 |
37774272 | 90 분 | 68 일 | 4 |
MD5 (해시) |
150085504 | 22.5 분 | 17 일 | 1 |
참고 :
사용되는 기계는 인텔 모바일 코어 i3입니다.
crypt-des
andcrypt-md5
알고리즘 번호는 John The Ripper v1.6.38에서 가져 왔습니다.-test
출력.
MD5 HASH
숫자는 mdcrack 1.2에서 나온 것입니다.
SHA1
숫자는 Lcrack-20031130-Beta에서 나온 것입니다.
crypt-bf
숫자는 1000 개 이상의 8 자 암호를 반복하는 간단한 프로그램을 사용하여 사용됩니다. 그렇게하면 다른 수의 반복으로 속도를 보여줄 수 있습니다.John -test
13506 루프/SEC for 표시crypt-bf/5
. (결과의 매우 작은 차이는 사실에 따른 것입니다.crypt-bf
구현pgcrypto
John the Ripper에서 사용 된 것과 동일합니다.)
참고“모든 조합 시도”는 현실적인 운동이 아닙니다. 일반적으로 비밀번호 균열은 사전과 다양한 돌연변이를 모두 포함하는 사전의 도움으로 수행됩니다.
여기에서 함수는 OpenPGP (RFC 4880) 표준의 윈 토토 부분을 구현합니다. 지원되는 대칭 키 및 공개 키 윈 토토입니다.
윈 토토 된 PGP 메시지는 두 부분으로 구성됩니다.패킷:
세션 키를 포함하는 패킷-대칭 키 또는 공개 키 윈 토토.
세션 키와 윈 토토 된 데이터를 포함하는 패킷.
대칭 키를 윈 토토 할 때 (즉, 암호) :
주어진 암호는 String2key (S2K) 알고리즘을 사용하여 해시됩니다. 이것은와 다소 비슷합니다.crypt ()
알고리즘-의도적으로 느리고 임의의 소금으로-전장 바이너리 키를 생성합니다.
별도의 세션 키가 요청되면 새로운 랜덤 키가 생성됩니다. 그렇지 않으면 S2K 키는 세션 키로 직접 사용됩니다.
S2K 키를 직접 사용하려면 S2K 설정 만 세션 키 패킷에 넣습니다. 그렇지 않으면 세션 키가 S2K 키로 윈 토토되어 세션 키 패킷에 넣습니다.
공개 키로 윈 토토 할 때 :
새로운 랜덤 세션 키가 생성됩니다.
공개 키를 사용하여 윈 토토되어 세션 키 패킷에 넣습니다.
두 경우 모두 윈 토토 할 데이터가 다음과 같이 처리됩니다.
선택적 데이터 조작 : 압축, UTF-8로의 변환 및/또는 라인 목록의 변환.
데이터는 임의의 바이트 블록으로 접두사를 만듭니다. 이것은 임의의 IV를 사용하는 것과 같습니다.
랜덤 접두사 및 데이터의 SHA1 해시가 추가되었습니다.
이 모든 것은 세션 키로 윈 토토되어 데이터 패킷에 배치됩니다.
pgp_sym_encrypt ()
PGP_SYM_ENCRYPT (데이터 텍스트, PSW 텍스트 [, 옵션 텍스트])는 BYTEA를 반환합니다.
윈 토토데이터
대칭 PGP 키와 함께PSW
. 그만큼옵션
매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.
pgp_sym_decrypt ()
PGP_SYM_DECRYPT (MSG BYTEA, PSW 텍스트 [, 옵션 텍스트]) 텍스트를 반환합니다.
대칭 키 윈 토토 된 PGP 메시지를 해독합니다.
해독BYTEA
withpgp_sym_decrypt
허용되지 않습니다. 이것은 잘못된 문자 데이터를 출력하지 않습니다.PGP_SYM_DECRYPT_BYTEA
괜찮습니다.
the옵션
매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.
pgp_pub_encrypt ()
PGP_PUB_ENCRYPT (데이터 텍스트, 키 바이트 [, 옵션 텍스트])는 BYTEA를 반환합니다.
윈 토토데이터
공개 PGP 키 포함키
. 이 기능을 비밀 키에게 제공하면 오류가 발생합니다.
the옵션
매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.
pgp_pub_decrypt ()
pgp_pub_decrypt (msg bytea, key bytea [, psw text [, 옵션 텍스트]]) 텍스트를 반환합니다.
공개 키 윈 토토 메시지를 해독합니다.키
윈 토토에 사용 된 공개 키에 해당하는 비밀 키 여야합니다. 비밀 키가 암호로 보호 된 경우에서 암호를 제공해야합니다.PSW
. 비밀번호가 없지만 옵션을 지정하려면 빈 비밀번호를 제공해야합니다.
해독BYTEA
withPGP_PUB_DECRYPT
허용되지 않습니다. 이것은 잘못된 문자 데이터를 출력하지 않습니다.PGP_PUB_DECRYPT_BYTEA
괜찮습니다.
the옵션
매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.
pgp_key_id ()
pgp_key_id (bytea) 텍스트를 반환
pgp_key_id
PGP 공개 또는 비밀 키의 키 ID를 추출합니다. 또는 윈 토토 된 메시지가 주어지면 데이터를 윈 토토하는 데 사용 된 키 ID를 제공합니다.
2 개의 특별 키 ID를 반환 할 수 있습니다 :
Symkey
메시지는 대칭 키로 윈 토토됩니다.
Anykey
메시지는 공개 키 윈 토토되었지만 키 ID가 제거되었습니다. 즉, 어떤 비밀 키를 해독하는지 확인하기 위해 모든 비밀 키를 시도해야합니다.pgcrypto
자체는 그러한 메시지를 생성하지 않습니다.
다른 키는 동일한 ID를 가질 수 있습니다. 이것은 드물지만 정상적인 사건입니다.Anykey
.
Armor ()
,dearmor ()
Armor (Data Bytea [, Keys Text [], 값 text []]) 텍스트를 반환합니다.
이 함수는 PGP Ascii-Armor 형식으로 래프/랩핑 바이너리 데이터를 포장합니다. 기본적으로 CRC 및 추가 서식이 포함 된 Base64입니다.
키
및값
배열이 지정되어 있습니다.갑옷 헤더각 키/값 쌍의 장갑 형식에 추가됩니다. 두 배열 모두 단일 차원이어야하며 길이가 같아야합니다.
pgp_armor_headers
PGP_ARMOR_HEADERS (데이터 텍스트, 키 아웃 텍스트, 값 텍스트)를 반환
pgp_armor_headers ()
갑옷 헤더 추출데이터
. 리턴 값은 키와 값의 두 열이있는 행 세트입니다.
옵션은 gnupg와 유사하게 지명되었습니다. 옵션의 값은 동일한 부호 후에 제공되어야합니다.
pgp_sym_encrypt (data, psw, 'compress-algo = 1, cipher-algo = aes256')
제외한 모든 옵션Convert-CRLF
윈 토토 함수에만 적용하십시오. 해독 함수는 PGP 데이터에서 매개 변수를 얻습니다.
가장 흥미로운 옵션은 아마도입니다.compress-algo
and유니 코드 모드
. 나머지는 합리적인 불이행이 있어야합니다.
사용할 암호 알고리즘.
값 : BF, AES128, AES192, AES256 (OpenSSL- 전용 :3DES
,Cast5
)
기본값 : AES128
적용 : pgp_sym_encrypt, pgp_pub_encrypt
사용할 압축 알고리즘. 사용 가능PostgreSQLZlib와 함께 건축되었습니다.
값 :
0- 압축 없음
1- 지퍼 압축
2-Zlib 압축 (= zip plus meta-data and block crcs)
기본값 : 0
적용 : pgp_sym_encrypt, pgp_pub_encrypt
압축 얼마. 더 높은 레벨은 더 작지만 느리게 압축됩니다.
값 : 0, 1-9
기본값 : 6
적용 : pgp_sym_encrypt, pgp_pub_encrypt
변환 여부\ n
into\ r \ n
윈 토토 및\ r \ n
to\ n
해독 할 때. RFC 4880은 텍스트 데이터를 사용하여 저장해야한다고 지정합니다.\ r \ n
라인 피드. 이것을 사용하여 완전히 RFC 호환 동작을 얻으십시오.
값 : 0, 1
기본값 : 0
신청 : pgp_sym_encrypt, pgp_pub_encrypt, pgp_sym_decrypt, pgp_pub_decrypt
SHA-1로 데이터를 보호하지 마십시오. 이 옵션을 사용하는 유일한 이유는 고대 PGP 제품과의 호환성을 달성하여 RFC 4880에 SHA-1 보호 패킷을 추가하는 것을 포기하는 것입니다. 최근 gnupg.org 및 pgp.com 소프트웨어가 잘 지원됩니다..
값 : 0, 1
기본값 : 0
적용 : pgp_sym_encrypt, pgp_pub_encrypt
별도의 세션 키 사용. 공개 키 윈 토토는 항상 별도의 세션 키를 사용합니다.
값 : 0, 1
기본값 : 0
적용 : pgp_sym_encrypt
사용할 S2K 알고리즘.
값 :
0- 소금없이.
1- 소금이 있지만 고정 된 반복 카운트.
3- 가변 반복 카운트.
기본값 : 3
적용 : pgp_sym_encrypt
사용할 S2K 알고리즘의 반복 수. 1024와 65011712 사이의 값이어야합니다.
기본값 : 65536과 253952 사이의 임의 값
적용 : pgp_sym_encrypt, s2k-mode = 3
S2K 계산에 사용할 수있는 여러분 알고리즘.
값 : MD5, SHA1
기본값 : SHA1
적용 : pgp_sym_encrypt
별도의 세션 키를 윈 토토하는 데 사용할 윈 토토.
값 : BF, AES, AES128, AES192, AES256
기본값 : Cipher-Algo 사용
적용 : pgp_sym_encrypt
텍스트 데이터를 데이터베이스 내부 인코딩에서 UTF-8 및 뒤로 변환할지 여부. 데이터베이스가 이미 UTF-8 인 경우 변환이 수행되지 않지만 메시지는 UTF-8으로 태그됩니다.
값 : 0, 1
기본값 : 0
적용 : pgp_sym_encrypt, pgp_pub_encrypt
새로운 키를 생성하려면 :
gpg-gen-key
선호하는 키 유형은입니다.“DSA 및 ELGAMAL”.
RSA 윈 토토의 경우 DSA 또는 RSA 부호 전용 키를 마스터로 작성한 다음 RSA 윈 토토 서브 키를 추가해야합니다gpg -Edit-Key
.
열쇠를 나열하려면 :
gpg-list-secret-keys
ascii-Armor 형식으로 공개 키를 내보내려면 :
gpg -a -export keyid public.key
Ascii-Armor 형식으로 비밀 키를 내보내려면 :
gpg -a-export-secret-keys keyid incret.key
사용해야dearmor ()
이 키에서 PGP 함수에 제공하기 전에. 또는 이진 데이터를 처리 할 수 있으면 삭제할 수 있습니다-a
명령에서.
자세한 내용은 참조Man GPG
,GNU 개인 정보 핸드북및 기타 문서http : //www.gnupg.org.
서명에 대한 지원이 없습니다. 그것은 또한 윈 토토 서브 키가 마스터 키에 속하는지 여부를 확인하지 않음을 의미합니다.
마스터 키로 윈 토토 키를 지원하지 않습니다. 그러한 관행은 일반적으로 낙담하기 때문에 이것은 문제가되지 않아야합니다.
여러 하위 키에 대한 지원이 없습니다. 이것은 일반적인 관행이기 때문에 이것은 문제처럼 보일 수 있습니다.pgcrypto
, 그러나 사용 시나리오가 다소 다르기 때문에 새로운 것을 만듭니다.
이 함수는 데이터보다 암호를 실행합니다. PGP 윈 토토의 고급 기능이 없습니다.
사용자 키를 암호 키로 직접 사용합니다.
윈 토토 된 데이터가 수정되었는지 확인하기 위해 무결성 검사를 제공하지 않습니다.
사용자는 모든 윈 토토 매개 변수 자체를 관리 할 것으로 예상합니다. IV.
텍스트를 처리하지 않습니다.
그래서 PGP 윈 토토의 도입으로 원시 윈 토토 기능의 사용이 권장되지 않습니다.
Encrypt (Data Bytea, Key Bytea, type type type)는 Bytea를 반환합니다
|타입
. 의 구문타입
문자열은 :
알고리즘
[-
모드
] [/pad :
패딩
]
어디알고리즘
중 하나입니다.
BF
- Blowfish
aes
-AES (Rijndael -128, -192 또는 -256)
and모드
중 하나입니다.
CBC
- 다음 블록은 이전 (기본값)에 따라 다릅니다.
ECB
- 각 블록은 별도로 윈 토토됩니다 (테스트 만 해당)
and패딩
중 하나입니다.
PKCS
- 데이터는 길이 (기본값) 일 수 있습니다
없음
- 데이터는 암호 블록 크기의 배수 여야합니다
예를 들어, 이들은 다음과 같습니다.
윈 토토 (데이터, 'fooz', 'bf')
inEncrypt_iv
anddecrypt_iv
, TheIV
매개 변수는 CBC 모드의 초기 값입니다. ECB에 대해서는 무시됩니다.
gen_random_bytes (Count Integer)를 반환합니다
반환count
암호적으로 강한 무작위 바이트. 최대 1024 바이트는 한 번에 추출 될 수 있습니다.
gen_random_uuid () returns uuid
버전 4 (랜덤) UUID를 반환합니다.
pgcrypto
주요 PostgreSQL의 결과에 따라 구성구성
스크립트. 영향을 미치는 옵션은입니다.-with-zlib
and-with-OpensSL
.
Zlib로 컴파일 된 경우 PGP 윈 토토 기능은 윈 토토하기 전에 데이터를 압축 할 수 있습니다.
OpenSSL로 컴파일하면 더 많은 알고리즘이 있습니다. 또한 OpenSSL이 더 최적화 된 Bignum 함수를 가지고 있기 때문에 공개 키 윈 토토 기능이 더 빠릅니다.
표 F.20.OpenSSL이 있거나없는 기능 요약
기능 | 내장 | with OpenSSL |
---|---|---|
MD5 | 예 | 예 |
SHA1 | 예 | 예 |
SHA224/256/384/512 | 예 | 예 |
다른 다이제스트 알고리즘 | 아니오 | 예 (참고 1) |
Blowfish | 예 | 예 |
aes | 예 | 예 |
des/3des/cast5 | 아니오 | 예 |
원시 윈 토토 | 예 | 예 |
PGP 대칭 윈 토토 | 예 | 예 |
PGP Public-Key 윈 토토 | 예 | 예 |
OpenSSL3.0.0 이상 버전에서 레거시 제공 업체를 활성화해야합니다.OpenSSL.CNF
des 또는 blowfish와 같은 오래된 암호를 사용하기위한 구성 파일
참고 :
모든 다이제스트 알고리즘 OpenSSL 지원이 자동으로 선택됩니다. 이것은 암호로는 불가능하며 명시 적으로 지원되어야합니다.
SQL의 표준과 마찬가지로, 인수 중 어느 것이면 모든 기능은 NULL을 반환합니다. 이것은 부주의 한 사용에 대한 보안 위험을 초래할 수 있습니다.
allpgcrypto
함수는 데이터베이스 서버 내부에서 실행됩니다. 즉, 모든 데이터와 암호가 사이에 이동한다는 것을 의미합니다.pgcrypto
및 클라이언트 응용 프로그램은 명확한 텍스트입니다. 따라서 당신은해야합니다 :
로컬로 연결하거나 SSL 연결을 사용하십시오.
시스템 및 데이터베이스 관리자를 신뢰합니다.
할 수 없다면 클라이언트 애플리케이션 내부에서 윈 토토하는 것이 좋습니다.
구현은 저항하지 않습니다사이드 채널 공격. 예를 들어, A에 필요한 시간pgcrypto
완료하기위한 암호 해독 함수는 주어진 크기의 암호 텍스트마다 다릅니다.
http : //www.gnupg.org/gph/en/manual.html
GNU 개인 정보 핸드북.
https : //www.openwall.com/crypt/
암호 블로우 피쉬 알고리즘을 설명합니다.
https : //www.iusmentis.com/security/passphrasefaq/
좋은 비밀번호를 선택하는 방법.
http : //world.std.com/~reinhold/diceware.html
암호 선택에 대한 흥미로운 아이디어.
http : //www.interhack.net/people/cmcurtin/snake-oil-faq.html
좋은 윈 토토와 나쁜 윈 토토를 설명합니다.
https : //tools.ietf.org/html/rfc4880
OpenPGP 메시지 형식.
https : //tools.ietf.org/html/rfc1321
MD5 메시지 소화 알고리즘.
https : //tools.ietf.org/html/rfc2104
HMAC : 메시지 인증을위한 키드-하싱.
http : //www.usenix.org/events/usenix99/provos.html
Crypt-Des, Crypt-MD5 및 BCrypt 알고리즘 비교.
http : //en.wikipedia.org/wiki/fortmenta_ (prng)
Fortuna csprng의 설명
Jean-Luc Cooke Fortuna 기반/dev/random
Linux의 드라이버.
Marko Kreen<마르크러@gmail.com
pgcrypto
다음 소스에서 코드를 사용합니다.
알고리즘 | 저자 | 소스 원점 |
---|---|---|
des crypt | David Burren 및 기타 | freebsd libcrypt |
md5 crypt | Poul-Henning Kamp | freebsd libcrypt |
Blowfish Crypt | Solar Designer | www.openwall.com |
Blowfish Cipher | Simon Tatham | Putty |
Rijndael Cipher | Brian Gladman | OpenBSD SYS/CRYPTO |
MD5 HASH 및 SHA1 | 넓은 프로젝트 | Kame Kame/Sys/Crypto |
SHA256/384/512 | Aaron D. Gifford | OpenBSD Sys/Crypto |
Bignum Math | Michael J. Fromberger | dartmouth.edu/~sting/sw/imath |