이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : F.26. pgcrypto - 토토 사이트 순위 기능버전 또는 위에 나열된 다른 지원되는 버전 중 하나입니다.

F.26.pgcrypto

thepgcrypto모듈은 윈 토토 함수를 제공합니다postgresql.

F.26.1.일반 해싱 기능

F.26.1.1.digest ()

다이제스트 (데이터 텍스트, 텍스트 유형)는 BYTEA를 반환합니다

지정된 이진 해시를 계산합니다데이터.type사용할 알고리즘입니다. 표준 알고리즘은MD5,SHA1,SHA224,SHA256,SHA384andSHA512. 만약에pgcryptoOpenSSL로 제작되었으며 자세히 설명 된대로 더 많은 알고리즘을 사용할 수 있습니다.테이블 F.20.

다각형 문자열로 다이제스트를 원한다면encode ()결과. 예를 들어:

함수 생성 또는 교체 SHA1 (BYTEA) 텍스트를 $$로 반환합니다

F.26.1.2.hmac ()

HMAC (데이터 텍스트, 키 텍스트, 유형 텍스트)는 BYTEA를 반환합니다

해시 Mac을 계산합니다데이터with key.타입digest ().

이것은와 유사합니다digest ()그러나 해시는 키를 아는 것만 다시 계산할 수 있습니다. 이것은 데이터를 변경하고 해시를 일치하도록 변경하는 사람의 시나리오를 방지합니다.

키가 해시 블록 크기보다 큰 경우 먼저 해시되고 결과가 키로 사용됩니다.

F.26.2.암호 해싱 함수

함수crypt ()andgen_salt ()암호 해싱 용으로 특별히 설계되었습니다.crypt ()해싱 및gen_salt ()알고리즘 매개 변수 준비.

알고리즘crypt ()다음과 같은 일반적인 MD5 또는 SHA1 해싱 알고리즘과 다릅니다 :

  1. 느린다. 데이터의 양이 너무 작기 때문에 이것은 무차별 대결 암호를 어렵게 만드는 유일한 방법입니다.

  2. 그들은 random 값을 사용합니다.SALT, 동일한 비밀번호를 가진 사용자가 윈 토토 된 암호가 다릅니다. 이것은 또한 알고리즘을 뒤집는 것에 대한 추가 방어입니다.

  3. 결과에 알고리즘 유형이 포함되어 있으므로 다른 알고리즘으로 해시 된 암호는 공존 할 수 있습니다.

  4. 그중 일부는 적응력이 있습니다. 즉, 컴퓨터가 더 빨라질 때 기존 비밀번호와 비 호환성을 도입하지 않고도 알고리즘을 느리게 조정할 수 있습니다..

테이블 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

F.26.2.1.crypt ()

crypt (비밀번호 텍스트, 소금 텍스트) 텍스트를 반환

암호 계산 (3)-스타일 해시비밀번호. 새 비밀번호를 저장할 때 사용해야합니다.gen_salt ()새로운 생성SALT값. 비밀번호를 확인하려면 저장된 해시 값을 전달합니다.SALT, 결과가 저장된 값과 일치하는지 여부를 테스트합니다.

새 비밀번호 설정의 예 :

업데이트 ... set pswhash = crypt ( 'new password', gen_salt ( 'md5'));

인증의 예 :

PSWMATCH로서 ...

이것은 반환true입력 된 암호가 올바른 경우.

F.26.2.2.gen_salt ()

gen_salt (텍스트 유형 [, iter_count integer]) 텍스트를 반환

crypt (). 소금 끈도 말해crypt ()사용할 알고리즘.

the타입매개 변수 해싱 알고리즘을 지정합니다. 허용 된 유형은 다음과 같습니다.des,XDES,MD5bf.

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-desandcrypt-md5알고리즘 번호는 John The Ripper v1.6.38에서 가져 왔습니다.-test출력.

  • MD5 HASH숫자는 mdcrack 1.2에서 나온 것입니다.

  • SHA1숫자는 Lcrack-20031130-Beta에서 나온 것입니다.

  • crypt-bf숫자는 1000 개 이상의 8 자 암호를 반복하는 간단한 프로그램을 사용하여 사용됩니다. 그렇게하면 다른 수의 반복으로 속도를 보여줄 수 있습니다.John -test13506 루프/SEC for 표시crypt-bf/5. (결과의 매우 작은 차이는 사실에 따른 것입니다.crypt-bf구현pgcryptoJohn the Ripper에서 사용 된 것과 동일합니다.)

참고모든 조합 시도는 현실적인 운동이 아닙니다. 일반적으로 비밀번호 균열은 사전과 다양한 돌연변이를 모두 포함하는 사전의 도움으로 수행됩니다.

F.26.3.PGP 윈 토토 기능

여기에서 함수는 OpenPGP (RFC 4880) 표준의 윈 토토 부분을 구현합니다. 지원되는 대칭 키 및 공개 키 윈 토토입니다.

윈 토토 된 PGP 메시지는 두 부분으로 구성됩니다.패킷:

  • 세션 키를 포함하는 패킷-대칭 키 또는 공개 키 윈 토토.

  • 세션 키와 윈 토토 된 데이터를 포함하는 패킷.

대칭 키를 윈 토토 할 때 (즉, 암호) :

  1. 주어진 암호는 String2key (S2K) 알고리즘을 사용하여 해시됩니다. 이것은와 다소 비슷합니다.crypt ()알고리즘-의도적으로 느리고 임의의 소금으로-전장 바이너리 키를 생성합니다.

  2. 별도의 세션 키가 요청되면 새로운 랜덤 키가 생성됩니다. 그렇지 않으면 S2K 키는 세션 키로 직접 사용됩니다.

  3. S2K 키를 직접 사용하려면 S2K 설정 만 세션 키 패킷에 넣습니다. 그렇지 않으면 세션 키가 S2K 키로 윈 토토되어 세션 키 패킷에 넣습니다.

공개 키로 윈 토토 할 때 :

  1. 새로운 랜덤 세션 키가 생성됩니다.

  2. 공개 키를 사용하여 윈 토토되어 세션 키 패킷에 넣습니다.

두 경우 모두 윈 토토 할 데이터가 다음과 같이 처리됩니다.

  1. 선택적 데이터 조작 : 압축, UTF-8로의 변환 및/또는 라인 목록의 변환.

  2. 데이터는 임의의 바이트 블록으로 접두사를 만듭니다. 이것은 임의의 IV를 사용하는 것과 같습니다.

  3. 랜덤 접두사 및 데이터의 SHA1 해시가 추가되었습니다.

  4. 이 모든 것은 세션 키로 윈 토토되어 데이터 패킷에 배치됩니다.

F.26.3.1.pgp_sym_encrypt ()

PGP_SYM_ENCRYPT (데이터 텍스트, PSW 텍스트 [, 옵션 텍스트])는 BYTEA를 반환합니다.

윈 토토데이터대칭 PGP 키와 함께PSW. 그만큼옵션매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.

F.26.3.2.pgp_sym_decrypt ()

PGP_SYM_DECRYPT (MSG BYTEA, PSW 텍스트 [, 옵션 텍스트]) 텍스트를 반환합니다.

대칭 키 윈 토토 된 PGP 메시지를 해독합니다.

해독BYTEAwithpgp_sym_decrypt허용되지 않습니다. 이것은 잘못된 문자 데이터를 출력하지 않습니다.PGP_SYM_DECRYPT_BYTEA괜찮습니다.

the옵션매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.

F.26.3.3.pgp_pub_encrypt ()

PGP_PUB_ENCRYPT (데이터 텍스트, 키 바이트 [, 옵션 텍스트])는 BYTEA를 반환합니다.

윈 토토데이터공개 PGP 키 포함. 이 기능을 비밀 키에게 제공하면 오류가 발생합니다.

the옵션매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.

F.26.3.4.pgp_pub_decrypt ()

pgp_pub_decrypt (msg bytea, key bytea [, psw text [, 옵션 텍스트]]) 텍스트를 반환합니다.

공개 키 윈 토토 메시지를 해독합니다.윈 토토에 사용 된 공개 키에 해당하는 비밀 키 여야합니다. 비밀 키가 암호로 보호 된 경우에서 암호를 제공해야합니다.PSW. 비밀번호가 없지만 옵션을 지정하려면 빈 비밀번호를 제공해야합니다.

해독BYTEAwithPGP_PUB_DECRYPT허용되지 않습니다. 이것은 잘못된 문자 데이터를 출력하지 않습니다.PGP_PUB_DECRYPT_BYTEA괜찮습니다.

the옵션매개 변수는 아래에 설명 된대로 옵션 설정을 포함 할 수 있습니다.

F.26.3.5.pgp_key_id ()

pgp_key_id (bytea) 텍스트를 반환

pgp_key_idPGP 공개 또는 비밀 키의 키 ID를 추출합니다. 또는 윈 토토 된 메시지가 주어지면 데이터를 윈 토토하는 데 사용 된 키 ID를 제공합니다.

2 개의 특별 키 ID를 반환 할 수 있습니다 :

  • Symkey

    메시지는 대칭 키로 윈 토토됩니다.

  • Anykey

    메시지는 공개 키 윈 토토되었지만 키 ID가 제거되었습니다. 즉, 어떤 비밀 키를 해독하는지 확인하기 위해 모든 비밀 키를 시도해야합니다.pgcrypto자체는 그러한 메시지를 생성하지 않습니다.

다른 키는 동일한 ID를 가질 수 있습니다. 이것은 드물지만 정상적인 사건입니다.Anykey.

F.26.3.6.Armor (),dearmor ()

Armor (Data Bytea [, Keys Text [], 값 text []]) 텍스트를 반환합니다.

이 함수는 PGP Ascii-Armor 형식으로 래프/랩핑 바이너리 데이터를 포장합니다. 기본적으로 CRC 및 추가 서식이 포함 된 Base64입니다.

배열이 지정되어 있습니다.갑옷 헤더각 키/값 쌍의 장갑 형식에 추가됩니다. 두 배열 모두 단일 차원이어야하며 길이가 같아야합니다.

F.26.3.7.pgp_armor_headers

PGP_ARMOR_HEADERS (데이터 텍스트, 키 아웃 텍스트, 값 텍스트)를 반환

pgp_armor_headers ()갑옷 헤더 추출데이터. 리턴 값은 키와 값의 두 열이있는 행 세트입니다.

F.26.3.8.PGP 기능 옵션

옵션은 gnupg와 유사하게 지명되었습니다. 옵션의 값은 동일한 부호 후에 제공되어야합니다.

pgp_sym_encrypt (data, psw, 'compress-algo = 1, cipher-algo = aes256')

제외한 모든 옵션Convert-CRLF윈 토토 함수에만 적용하십시오. 해독 함수는 PGP 데이터에서 매개 변수를 얻습니다.

가장 흥미로운 옵션은 아마도입니다.compress-algoand유니 코드 모드. 나머지는 합리적인 불이행이 있어야합니다.

F.26.3.8.1.암호-알 고

사용할 암호 알고리즘.

값 : BF, AES128, AES192, AES256 (OpenSSL- 전용 :3DES,Cast5)
기본값 : AES128
적용 : pgp_sym_encrypt, pgp_pub_encrypt

F.26.3.8.2.압축 알 고

사용할 압축 알고리즘. 사용 가능PostgreSQLZlib와 함께 건축되었습니다.

값 :
0- 압축 없음
1- 지퍼 압축
2-Zlib 압축 (= zip plus meta-data and block crcs)
기본값 : 0
적용 : pgp_sym_encrypt, pgp_pub_encrypt

F.26.3.8.3.압축 수준

압축 얼마. 더 높은 레벨은 더 작지만 느리게 압축됩니다.

값 : 0, 1-9
기본값 : 6
적용 : pgp_sym_encrypt, pgp_pub_encrypt

F.26.3.8.4.Convert-CRLF

변환 여부\ ninto\ r \ n윈 토토 및\ r \ nto\ n해독 할 때. RFC 4880은 텍스트 데이터를 사용하여 저장해야한다고 지정합니다.\ r \ n라인 피드. 이것을 사용하여 완전히 RFC 호환 동작을 얻으십시오.

값 : 0, 1
기본값 : 0
신청 : pgp_sym_encrypt, pgp_pub_encrypt, pgp_sym_decrypt, pgp_pub_decrypt

F.26.3.8.5.비활성화 MDC

SHA-1로 데이터를 보호하지 마십시오. 이 옵션을 사용하는 유일한 이유는 고대 PGP 제품과의 호환성을 달성하여 RFC 4880에 SHA-1 보호 패킷을 추가하는 것을 포기하는 것입니다. 최근 gnupg.org 및 pgp.com 소프트웨어가 잘 지원됩니다..

값 : 0, 1
기본값 : 0
적용 : pgp_sym_encrypt, pgp_pub_encrypt

F.26.3.8.6.Sess-Key

별도의 세션 키 사용. 공개 키 윈 토토는 항상 별도의 세션 키를 사용합니다.

값 : 0, 1
기본값 : 0
적용 : pgp_sym_encrypt

F.26.3.8.7.S2K 모드

사용할 S2K 알고리즘.

값 :
0- 소금없이.
1- 소금이 있지만 고정 된 반복 카운트.
3- 가변 반복 카운트.
기본값 : 3
적용 : pgp_sym_encrypt

F.26.3.8.8.s2k-count

사용할 S2K 알고리즘의 반복 수. 1024와 65011712 사이의 값이어야합니다.

기본값 : 65536과 253952 사이의 임의 값
적용 : pgp_sym_encrypt, s2k-mode = 3

F.26.3.8.9.S2K 자리-알 고

S2K 계산에 사용할 수있는 여러분 알고리즘.

값 : MD5, SHA1
기본값 : SHA1
적용 : pgp_sym_encrypt

F.26.3.8.10.s2k-cipher-algo

별도의 세션 키를 윈 토토하는 데 사용할 윈 토토.

값 : BF, AES, AES128, AES192, AES256
기본값 : Cipher-Algo 사용
적용 : pgp_sym_encrypt

F.26.3.8.11.유니 코드 모드

텍스트 데이터를 데이터베이스 내부 인코딩에서 UTF-8 및 뒤로 변환할지 여부. 데이터베이스가 이미 UTF-8 인 경우 변환이 수행되지 않지만 메시지는 UTF-8으로 태그됩니다.

값 : 0, 1
기본값 : 0
적용 : pgp_sym_encrypt, pgp_pub_encrypt

F.26.3.9.GNUPG로 PGP 키 생성

새로운 키를 생성하려면 :

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.

F.26.3.10.PGP 코드 제한

  • 서명에 대한 지원이 없습니다. 그것은 또한 윈 토토 서브 키가 마스터 키에 속하는지 여부를 확인하지 않음을 의미합니다.

  • 마스터 키로 윈 토토 키를 지원하지 않습니다. 그러한 관행은 일반적으로 낙담하기 때문에 이것은 문제가되지 않아야합니다.

  • 여러 하위 키에 대한 지원이 없습니다. 이것은 일반적인 관행이기 때문에 이것은 문제처럼 보일 수 있습니다.pgcrypto, 그러나 사용 시나리오가 다소 다르기 때문에 새로운 것을 만듭니다.

F.26.4.원시 윈 토토 기능

이 함수는 데이터보다 암호를 실행합니다. PGP 윈 토토의 고급 기능이 없습니다.

  1. 사용자 키를 암호 키로 직접 사용합니다.

  2. 윈 토토 된 데이터가 수정되었는지 확인하기 위해 무결성 검사를 제공하지 않습니다.

  3. 사용자는 모든 윈 토토 매개 변수 자체를 관리 할 것으로 예상합니다. IV.

  4. 텍스트를 처리하지 않습니다.

그래서 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_ivanddecrypt_iv, TheIV매개 변수는 CBC 모드의 초기 값입니다. ECB에 대해서는 무시됩니다.

F.26.5.랜덤 데이터 기능

gen_random_bytes (Count Integer)를 반환합니다

반환count암호적으로 강한 무작위 바이트. 최대 1024 바이트는 한 번에 추출 될 수 있습니다.

gen_random_uuid () returns uuid

버전 4 (랜덤) UUID를 반환합니다.

F.26.6.노트

F.26.6.1.구성

pgcrypto주요 PostgreSQL의 결과에 따라 구성구성스크립트. 영향을 미치는 옵션은입니다.-with-zliband-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.CNFdes 또는 blowfish와 같은 오래된 암호를 사용하기위한 구성 파일

참고 :

  1. 모든 다이제스트 알고리즘 OpenSSL 지원이 자동으로 선택됩니다. 이것은 암호로는 불가능하며 명시 적으로 지원되어야합니다.

F.26.6.2.널 핸들링

SQL의 표준과 마찬가지로, 인수 중 어느 것이면 모든 기능은 NULL을 반환합니다. 이것은 부주의 한 사용에 대한 보안 위험을 초래할 수 있습니다.

F.26.6.3.보안 제한

allpgcrypto함수는 데이터베이스 서버 내부에서 실행됩니다. 즉, 모든 데이터와 암호가 사이에 이동한다는 것을 의미합니다.pgcrypto및 클라이언트 응용 프로그램은 명확한 텍스트입니다. 따라서 당신은해야합니다 :

  1. 로컬로 연결하거나 SSL 연결을 사용하십시오.

  2. 시스템 및 데이터베이스 관리자를 신뢰합니다.

할 수 없다면 클라이언트 애플리케이션 내부에서 윈 토토하는 것이 좋습니다.

구현은 저항하지 않습니다사이드 채널 공격. 예를 들어, A에 필요한 시간pgcrypto완료하기위한 암호 해독 함수는 주어진 크기의 암호 텍스트마다 다릅니다.

F.26.6.4.유용한 독서

F.26.6.5.기술 참조

F.26.7.작가

Marko Kreen

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