F.36. pgcrypto
- F.36.1. СÑандаÑÑнÑе ÑÑнкÑии Ñ
еÑиÑованиÑ
- F.36.2. ФÑнкÑии Ñ ÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑолÑ
- F.36.3. ФÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° базе PGP
- F.36.4. ÐизкоÑÑовневÑе ÑÑнкÑии заÑиÑного пÑеобÑазованиÑ
- F.36.5. ФÑнкÑии полÑÑÐµÐ½Ð¸Ñ ÑлÑÑайнÑÑ Ð´Ð°Ð½Ð½ÑÑ
- F.36.6. ÐÑимеÑаниÑ
- F.36.7. ÐвÑоÑ
- F.36.2. ФÑнкÑии Ñ ÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑолÑ
ÐодÑÐ»Ñ pgcrypto пÑедоÑÑавлÑÐµÑ ÑÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Postgres Pro.
ÐаннÑй модÑÐ»Ñ ÑÑиÑаеÑÑÑ Â«Ð´Ð¾Ð²ÐµÑеннÑм», Ñо еÑÑÑ ÐµÐ³Ð¾ могÑÑ ÑÑÑанавливаÑÑ Ð¾Ð±ÑÑнÑе полÑзоваÑели, имеÑÑие пÑаво CREATE в ÑекÑÑей базе даннÑÑ
.
F.36.1. СÑандаÑÑнÑе ÑÑнкÑии Ñ ÐµÑиÑованиÑ
F.36.1.1. digest()
digest(data text, type text) returns bytea digest(data bytea, type text) returns bytea
ÐÑÑиÑлÑÐµÑ Ð´Ð²Ð¾Ð¸ÑнÑй Ñ
ÐµÑ Ð´Ð°Ð½Ð½ÑÑ
(data). ÐаÑамеÑÑ type вÑбиÑÐ°ÐµÑ Ð¸ÑполÑзÑемÑй алгоÑиÑм. ÐоддеÑживаÑÑÑÑ ÑÑандаÑÑнÑе алгоÑиÑмÑ: md5, sha1, sha224, sha256, sha384 и sha512. ÐÑли модÑÐ»Ñ pgcrypto ÑобиÑалÑÑ Ñ OpenSSL, ÑÑановÑÑÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð¸ дÑÑгие алгоÑиÑмÑ, как опиÑано в ТаблиÑе F.24.
ÐÑли Ð²Ñ Ñ
оÑиÑе полÑÑиÑÑ Ð´Ð°Ð¹Ð´Ð¶ÐµÑÑ Ð² виде ÑеÑÑнадÑаÑеÑиÑной ÑÑÑоки, пÑимениÑе encode() к ÑезÑлÑÑаÑÑ. ÐапÑимеÑ:
CREATE OR REPLACE FUNCTION sha1(bytea) returns text AS $$
SELECT encode(digest($1, 'sha1'), 'hex')
$$ LANGUAGE SQL STRICT IMMUTABLE;F.36.1.2. hmac()
hmac(data text, key text, type text) returns bytea hmac(data bytea, key bytea, type text) returns bytea
ÐÑÑиÑлÑÐµÑ Ð¸Ð¼Ð¸ÑовÑÑÐ°Ð²ÐºÑ Ð½Ð° оÑнове Ñ
еÑа Ð´Ð»Ñ Ð´Ð°Ð½Ð½ÑÑ
data Ñ ÐºÐ»ÑÑом key. ÐаÑамеÑÑ type Ð¸Ð¼ÐµÐµÑ Ñо же знаÑение, ÑÑо и Ð´Ð»Ñ digest().
ÐÑа ÑÑнкÑÐ¸Ñ Ð¿Ð¾Ñ
ожа на digest(), но вÑÑиÑлиÑÑ Ñ
ÐµÑ Ñ Ð½ÐµÐ¹ можно, ÑолÑко Ð·Ð½Ð°Ñ ÐºÐ»ÑÑ. ÐÑо заÑиÑÐ°ÐµÑ Ð¾Ñ ÑÑенаÑÐ¸Ñ Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ
еÑа вмеÑÑе Ñ Ð½Ð¸Ð¼Ð¸.
ÐÑли ÑÐ°Ð·Ð¼ÐµÑ ÐºÐ»ÑÑа болÑÑе ÑазмеÑа блока Ñ ÐµÑа, он ÑнаÑала Ñ ÐµÑиÑÑеÑÑÑ, а заÑем иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве клÑÑа Ñ ÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ .
F.36.2. ФÑнкÑии Ñ ÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑолÑ
ФÑнкÑии crypt() и gen_salt() ÑазÑабоÑÐ°Ð½Ñ ÑпеÑиалÑно Ð´Ð»Ñ Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ñолей. ФÑнкÑÐ¸Ñ crypt() вÑполнÑÐµÑ Ñ
еÑиÑование, а gen_salt() подгоÑÐ°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¿Ð°ÑамеÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑма Ð´Ð»Ñ Ð½ÐµÑ.
ÐлгоÑиÑÐ¼Ñ Ð² crypt() оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð±ÑÑнÑÑ
алгоÑиÑмов Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ MD5 и SHA1 в ÑледÑÑÑиÑ
аÑпекÑаÑ
:
Ðни медленнÑе. Так как обÑÑм даннÑÑ Ð½ÐµÐ²ÐµÐ»Ð¸Ðº, ÑÑо единÑÑвеннÑй ÑпоÑоб ÑÑложниÑÑ Ð¿ÐµÑÐµÐ±Ð¾Ñ Ð¿Ð°Ñолей.
Ðни иÑполÑзÑÑÑ ÑлÑÑайное знаÑение, назÑваемое ÑолÑÑ, ÑÑÐ¾Ð±Ñ Ñ Ð¿Ð¾Ð»ÑзоваÑелей Ñ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми паÑолÑми заÑиÑÑннÑе паÑоли оказÑвалиÑÑ ÑазнÑми. ÐÑо Ñакже обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð·Ð°ÑиÑÑ Ð¾Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑаÑного алгоÑиÑма.
Ðни вклÑÑаÑÑ Ð² ÑезÑлÑÑÐ°Ñ Ñип алгоÑиÑма, ÑÑо допÑÑÐºÐ°ÐµÑ ÑоÑÑÑеÑÑвование паÑолей, Ñ ÐµÑиÑованнÑÑ ÑазнÑми алгоÑиÑмами.
ÐекоÑоÑÑе из Ð½Ð¸Ñ ÑвлÑÑÑÑÑ Ð°Ð´Ð°Ð¿ÑиÑÑемÑми â Ñо еÑÑÑ Ñ ÑоÑÑом пÑоизводиÑелÑноÑÑи компÑÑÑеÑов ÑÑи алгоÑиÑÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ наÑÑÑоиÑÑ Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ ÑÑали медленнее, пÑи ÑÑом ÑÐ¾Ñ ÑанÑÑ ÑовмеÑÑимоÑÑÑ Ñ ÑÑÑеÑÑвÑÑÑими паÑолÑми.
РТаблиÑе F.21 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð°Ð»Ð³Ð¾ÑиÑмÑ, поддеÑживаемÑе ÑÑнкÑией crypt().
ТаблиÑа F.21. ÐлгоÑиÑмÑ, коÑоÑÑе поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ crypt()
| ÐлгоÑиÑм | ÐакÑ. длина паÑÐ¾Ð»Ñ | ÐдапÑивнÑй? | Ð Ð°Ð·Ð¼ÐµÑ Ñоли (биÑ) | Ð Ð°Ð·Ð¼ÐµÑ ÑезÑлÑÑаÑа | ÐпиÑание |
|---|---|---|---|---|---|
bf | 72 | да | 128 | 60 | Ðа базе Blowfish, ваÑиаÑÐ¸Ñ 2a |
md5 | без огÑаниÑений | Ð½ÐµÑ | 48 | 34 | crypt на базе MD5 |
xdes | 8 | да | 24 | 20 | РаÑÑиÑеннÑй DES |
des | 8 | Ð½ÐµÑ | 12 | 13 | ÐзнаÑалÑнÑй crypt из UNIX |
F.36.2.1. crypt()
crypt(password text, salt text) returns text
ÐÑÑиÑлÑÐµÑ Ñ
ÐµÑ Ð¿Ð°ÑÐ¾Ð»Ñ (password) в ÑÑиле crypt(3). ÐÐ»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ паÑÐ¾Ð»Ñ Ð½ÐµÐ¾Ð±Ñ
одимо вÑзваÑÑ gen_salt(), ÑÑÐ¾Ð±Ñ ÑгенеÑиÑоваÑÑ Ð½Ð¾Ð²Ð¾Ðµ знаÑение Ñоли (salt). ÐÐ»Ñ Ð¿ÑовеÑки паÑÐ¾Ð»Ñ Ð½Ñжно пеÑедаÑÑ ÑоÑ
ÑанÑнное знаÑение Ñ
еÑа в паÑамеÑÑе salt и пÑовеÑиÑÑ, ÑооÑвеÑÑÑвÑÐµÑ Ð»Ð¸ ÑезÑлÑÑÐ°Ñ ÑоÑ
ÑанÑÐ½Ð½Ð¾Ð¼Ñ Ð·Ð½Ð°ÑениÑ.
ÐÑÐ¸Ð¼ÐµÑ ÑÑÑановки нового паÑолÑ:
UPDATE ... SET pswhash = crypt('new password', gen_salt('md5'));ÐÑÐ¸Ð¼ÐµÑ Ð¿ÑовеÑки паÑолÑ:
SELECT (pswhash = crypt('entered password', pswhash)) AS pswmatch FROM ... ; ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ true, еÑли введÑннÑй паÑÐ¾Ð»Ñ Ð¿ÑавилÑнÑй.
F.36.2.2. gen_salt()
gen_salt(type text [, iter_count integer ]) returns text
ÐÑÑиÑлÑÐµÑ Ð½Ð¾Ð²Ð¾Ðµ ÑлÑÑайное знаÑение Ñоли Ð´Ð»Ñ ÑÑнкÑии crypt(). СÑÑока Ñоли Ñакже говоÑÐ¸Ñ crypt(), какой алгоÑиÑм иÑполÑзоваÑÑ.
ÐаÑамеÑÑ type задаÑÑ Ð°Ð»Ð³Ð¾ÑиÑм Ñ
еÑиÑованиÑ. ÐÑинимаÑÑÑÑ ÑледÑÑÑие ваÑианÑÑ: des, xdes, md5 и bf.
ÐаÑамеÑÑ iter_count позволÑÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ ÑказаÑÑ ÑÑÑÑÑик иÑеÑаÑий Ð´Ð»Ñ Ð°Ð»Ð³Ð¾ÑиÑма, коÑоÑÑй его пÑинимаеÑ. Чем болÑÑе ÑÑо ÑиÑло, Ñем болÑÑе вÑемени ÑйдÑÑ Ð½Ð° вÑÑиÑление Ñ
еÑа паÑолÑ, а знаÑиÑ, Ñем болÑÑе вÑемени понадобиÑÑÑ, ÑÑÐ¾Ð±Ñ Ð²Ð·Ð»Ð¾Ð¼Ð°ÑÑ ÐµÐ³Ð¾. ХоÑÑ Ñо ÑлиÑком болÑÑим знаÑением вÑÐµÐ¼Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ñ
еÑа Ð¼Ð¾Ð¶ÐµÑ Ð²ÑÑаÑÑи до неÑколÑкиÑ
Ð»ÐµÑ â ÑÑо вÑÑд ли пÑакÑиÑно. Ðогда паÑамеÑÑ iter_count опÑÑкаеÑÑÑ, пÑименÑеÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво иÑеÑаÑий по ÑмолÑаниÑ. ÐножеÑÑво допÑÑÑимÑÑ
знаÑений Ð´Ð»Ñ iter_count завиÑÐ¸Ñ Ð¾Ñ Ð°Ð»Ð³Ð¾ÑиÑма, как показано в ТаблиÑе F.22.
ТаблиÑа F.22. СÑÑÑÑики иÑеÑаÑий Ð´Ð»Ñ crypt()
| ÐлгоÑиÑм | Ðо ÑмолÑÐ°Ð½Ð¸Ñ | Ðин. | ÐакÑ. |
|---|---|---|---|
xdes | 725 | 1 | 16777215 |
bf | 6 | 4 | 31 |
ÐÐ»Ñ xdes еÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑное огÑаниÑение: ÑÑÑÑÑик иÑеÑаÑий должен бÑÑÑ Ð½ÐµÑÑÑнÑм.
ÐÑи вÑбоÑе Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑего ÑиÑла иÑеÑаÑий ÑÑÑиÑе, ÑÑо оÑигиналÑнÑй алгоÑиÑм DES crypt бÑл ÑаÑÑÑиÑан Ñак, ÑÑÐ¾Ð±Ñ Ð²ÑдаваÑÑ 4 Ñ ÐµÑа в ÑекÑÐ½Ð´Ñ Ð½Ð° компÑÑÑеÑÐ°Ñ Ñого вÑемени. ÐÑли за ÑекÑÐ½Ð´Ñ Ð±ÑÐ´ÐµÑ Ð²ÑÑиÑлÑÑÑÑÑ Ð¼ÐµÐ½ÑÑе 4 Ñ ÐµÑей, ÑкоÑее вÑего, возникнÑÑ Ð¾Ð¿ÑеделÑннÑе неÑдобÑÑва пÑи полÑзовании. С дÑÑгой ÑÑоÑонÑ, ÑкоÑоÑÑÑ Ð±Ð¾Ð»ÑÑе, Ñем 100 Ñ ÐµÑей в ÑекÑндÑ, веÑоÑÑно, бÑÐ´ÐµÑ ÑлиÑком вÑÑокой.
РТаблиÑе F.23 дана Ñводка оÑноÑиÑелÑной ÑкоÑоÑÑи ÑазлиÑнÑÑ
алгоÑиÑмов Ñ
еÑиÑованиÑ. Ð ÑаблиÑе показано, ÑколÑко вÑемени ÑйдÑÑ Ð½Ð° пеÑÐµÐ±Ð¾Ñ Ð²ÑеÑ
комбинаÑией Ñимволов в воÑÑмиÑимволÑном паÑоле, в пÑедположении, ÑÑо паÑÐ¾Ð»Ñ ÑодеÑÐ¶Ð¸Ñ ÑолÑко бÑÐºÐ²Ñ Ð² нижнем ÑегиÑÑÑе, либо бÑÐºÐ²Ñ Ð² веÑÑ
нем и нижнем ÑегиÑÑÑе, а Ñакже ÑиÑÑÑ. Ð ÑÑÑокаÑ
crypt-bf ÑиÑла поÑле коÑой ÑеÑÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ð·Ð½Ð°Ñение паÑамеÑÑа iter_count ÑÑнкÑии gen_salt.
ТаблиÑа F.23. СкоÑоÑÑи алгоÑиÑмов Ñ ÐµÑиÑованиÑ
| ÐлгоÑиÑм | ХеÑей/Ñек. | ÐÐ»Ñ [a-z] | ÐÐ»Ñ [A-Za-z0-9] | ÐлиÑелÑноÑÑÑ Ð¾ÑноÑиÑелÑно md5 |
|---|---|---|---|---|
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 |
ÐамеÑаниÑ:
ÐÐ»Ñ ÑаÑÑÑÑов иÑполÑзовалÑÑ Ð¿ÑоÑеÑÑÐ¾Ñ Intel Mobile Core i3.
ÐоказаÑели алгоÑиÑмов
crypt-desиcrypt-md5взÑÑÑ Ð¸Ð· вÑвода ÑеÑÑа пÑогÑÐ°Ð¼Ð¼Ñ John the Ripper v1.6.38.ÐоказаÑели
md5полÑÑÐµÐ½Ñ Ð¿ÑогÑаммой mdcrack 1.2.ÐоказаÑели
sha1полÑÑÐµÐ½Ñ Ð¿ÑогÑаммой lcrack-20031130-beta.ÐоказаÑели
crypt-bfполÑÑÐµÐ½Ñ Ð¿ÑоÑÑой пÑогÑаммой, обÑабаÑÑваÑÑей в Ñикле 1000 паÑолей из 8-Ñимволов. Таким ÑпоÑобом можно показаÑÑ ÑкоÑоÑÑÑ Ñ ÑазнÑм ÑиÑлом иÑеÑаÑий. ÐÐ»Ñ ÑпÑавки:john -testпоказÑÐ²Ð°ÐµÑ 13506 Ñиклов/Ñ Ð´Ð»Ñcrypt-bf/5. (ÐÑо оÑÐµÐ½Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑое ÑазлиÑие в ÑезÑлÑÑаÑÐ°Ñ ÑоглаÑÑеÑÑÑ Ñ Ñем ÑакÑом, ÑÑо ÑеализаÑиÑcrypt-bfвpgcryptoне оÑлиÑаеÑÑÑ Ð¾Ñ Ð¿ÑименÑемой в пÑогÑамме John the Ripper.)
ÐамеÑÑÑе, ÑÑо ваÑÐ¸Ð°Ð½Ñ Â«Ð¿ÐµÑепÑобоваÑÑ Ð²Ñе комбинаÑии» не вполне ÑеалиÑÑиÑен. ÐбÑÑно пеÑÐµÐ±Ð¾Ñ Ð¿Ð°Ñолей пÑоизводиÑÑÑ Ñ Ð¿Ñименением ÑловаÑей, коÑоÑÑе ÑодеÑÐ¶Ð°Ñ Ð¸ обÑÑнÑе Ñлова, и Ð¸Ñ ÑазлиÑнÑе видоизменениÑ. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð¶Ðµ Ð¿Ð¾Ñ Ð¾Ð¶Ð¸Ðµ на Ñлова паÑоли обÑÑно можно подобÑаÑÑ Ð±ÑÑÑÑее, Ñем за Ñказанное вÑемÑ, Ñогда как 6-ÑимволÑнÑй неÑловеÑнÑй паÑÐ¾Ð»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð²Ð·Ð»Ð¾Ð¼Ð°. Ð Ð¼Ð¾Ð¶ÐµÑ Ð¸ не избежаÑÑ.
F.36.3. ФÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° базе PGP
ФÑнкÑии, опиÑаннÑе здеÑÑ, ÑеализÑÑÑ ÑаÑÑÑ ÑÑандаÑÑа OpenPGP (RFC 4880), оÑноÑÑÑÑÑÑÑ Ðº заÑиÑÐ½Ð¾Ð¼Ñ Ð¿ÑеобÑазованиÑ. Ðни поддеÑживаÑÑ Ð·Ð°ÑиÑное пÑеобÑазование как Ñ ÑиммеÑÑиÑнÑм, Ñак и Ñ Ð¾ÑкÑÑÑÑм клÑÑом.
ÐаÑиÑÑнное PGP ÑообÑение ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· 2 ÑаÑÑей или пакеÑов:
ÐакеÑ, ÑодеÑжаÑий ÑеанÑовÑй клÑÑ â либо ÑиммеÑÑиÑнÑй, либо оÑкÑÑÑÑй (в заÑиÑÑнном виде).
ÐакеÑ, ÑодеÑжаÑий даннÑе, заÑиÑÑннÑе ÑеанÑовÑм клÑÑом.
ÐÑи заÑиÑном пÑеобÑазовании Ñ ÑиммеÑÑиÑнÑм клÑÑом (Ñо еÑÑÑ, паÑолем):
ÐаданнÑй паÑÐ¾Ð»Ñ Ñ ÐµÑиÑÑеÑÑÑ Ð¿Ð¾ алгоÑиÑÐ¼Ñ String2Key (S2K). ÐÑÐ¾Ñ Ð°Ð»Ð³Ð¾ÑиÑм подобен алгоÑиÑмам
crypt()â ÑпеÑиалÑно замедлен и добавлÑÐµÑ ÑлÑÑайнÑÑ ÑÐ¾Ð»Ñ â но на вÑÑ Ð¾Ð´ вÑдаÑÑ Ð´Ð²Ð¾Ð¸ÑнÑй клÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ длинÑ.ÐÑли ÑÑебÑеÑÑÑ Ð¾ÑделÑнÑй ÑеанÑовÑй клÑÑ, генеÑиÑÑеÑÑÑ Ð½Ð¾Ð²Ñй ÑлÑÑайнÑй клÑÑ. РпÑоÑивном ÑлÑÑае в каÑеÑÑве ÑеанÑового бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно клÑÑ S2K.
Ðогда иÑполÑзÑеÑÑÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно клÑÑ S2K, в Ð¿Ð°ÐºÐµÑ ÑеанÑового клÑÑа помеÑаÑÑÑÑ ÑолÑко паÑамеÑÑÑ S2K. РпÑоÑивном ÑлÑÑае ÑеанÑовÑй клÑÑ Ð·Ð°ÑиÑаеÑÑÑ ÐºÐ»ÑÑом S2K и помеÑаеÑÑÑ Ð² Ð¿Ð°ÐºÐµÑ ÑеанÑового клÑÑа.
ÐÑи заÑиÑном пÑеобÑазовании Ñ Ð¾ÑкÑÑÑÑм клÑÑом:
ÐенеÑиÑÑеÑÑÑ Ð½Ð¾Ð²Ñй ÑлÑÑайнÑй ÑеанÑовÑй клÑÑ.
Ðн заÑиÑаеÑÑÑ Ð¾ÑкÑÑÑÑм клÑÑом и помеÑаеÑÑÑ Ð² Ð¿Ð°ÐºÐµÑ ÑеанÑового клÑÑа.
РлÑбом ÑлÑÑае даннÑе, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð·Ð°ÑиÑенÑ, обÑабаÑÑваÑÑÑÑ Ñак:
ÐеобÑзаÑелÑÐ½Ð°Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñовка даннÑÑ : ÑжаÑие, пеÑекодиÑовка в UTF-8 и/или пÑеобÑазование конÑов ÑÑÑок.
ÐеÑед даннÑми добавлÑеÑÑÑ Ð±Ð»Ð¾Ðº ÑлÑÑайнÑÑ Ð±Ð°Ð¹Ñ. ÐÑо ÑавноÑилÑно иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑлÑÑайного векÑоÑа иниÑиализаÑии.
РконÑе добавлÑеÑÑÑ Ñ ÐµÑ SHA1 ÑлÑÑайного пÑеÑикÑа и даннÑÑ .
ÐÑÑ ÑÑо заÑиÑаеÑÑÑ ÑеанÑовÑм клÑÑом и помеÑаеÑÑÑ Ð² Ð¿Ð°ÐºÐµÑ Ð´Ð°Ð½Ð½ÑÑ .
F.36.3.1. pgp_sym_encrypt()
pgp_sym_encrypt(data text, psw text [, options text ]) returns bytea pgp_sym_encrypt_bytea(data bytea, psw text [, options text ]) returns bytea
ÐаÑиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе (data) ÑиммеÑÑиÑнÑм клÑÑом PGP psw. Ð options могÑÑ Ð¿ÐµÑедаваÑÑÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°ÑиÑного пÑеобÑазованиÑ, опиÑаннÑе ниже.
F.36.3.2. pgp_sym_decrypt()
pgp_sym_decrypt(msg bytea, psw text [, options text ]) returns text pgp_sym_decrypt_bytea(msg bytea, psw text [, options text ]) returns bytea
ÐÐµÐ»Ð°ÐµÑ Ð¾Ð±ÑаÑное пÑеобÑазование ÑообÑениÑ, заÑиÑÑнного ÑиммеÑÑиÑнÑм клÑÑом PGP.
ÐбÑаÑно пÑеобÑазовÑваÑÑ Ð´Ð°Ð½Ð½Ñе bytea ÑÑнкÑией pgp_sym_decrypt запÑеÑено. ÐÑо огÑаниÑение введено, ÑÑÐ¾Ð±Ñ Ð½Ðµ допÑÑÑиÑÑ Ð²Ñвода некоÑÑекÑнÑÑ
ÑимволÑнÑÑ
даннÑÑ
. ÐбÑаÑно пÑеобÑазовÑваÑÑ Ð¸Ð·Ð½Ð°ÑалÑно ÑекÑÑовÑе даннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pgp_sym_decrypt_bytea можно без огÑаниÑений.
ÐÑгÑÐ¼ÐµÐ½Ñ options Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°ÑиÑного пÑеобÑазованиÑ, опиÑаннÑе ниже.
F.36.3.3. pgp_pub_encrypt()
pgp_pub_encrypt(data text, key bytea [, options text ]) returns bytea pgp_pub_encrypt_bytea(data bytea, key bytea [, options text ]) returns bytea
ÐаÑиÑÐ°ÐµÑ Ð´Ð°Ð½Ð½Ñе (data) оÑкÑÑÑÑм клÑÑом PGP (key). ÐÑли пеÑедаÑÑ ÑÑой ÑÑнкÑии закÑÑÑÑй клÑÑ, она вÑдаÑÑ Ð¾ÑибкÑ.
ÐÑгÑÐ¼ÐµÐ½Ñ options Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°ÑиÑного пÑеобÑазованиÑ, опиÑаннÑе ниже.
F.36.3.4. pgp_pub_decrypt()
pgp_pub_decrypt(msg bytea, key bytea [, psw text [, options text ]]) returns text pgp_pub_decrypt_bytea(msg bytea, key bytea [, psw text [, options text ]]) returns bytea
ÐбÑаÑно пÑеобÑазовÑÐ²Ð°ÐµÑ ÑообÑение, заÑиÑÑнное оÑкÑÑÑÑм клÑÑом. Ð key должен пеÑедаваÑÑÑÑ Ð·Ð°ÐºÑÑÑÑй клÑÑ, ÑооÑвеÑÑÑвÑÑÑий оÑкÑÑÑÐ¾Ð¼Ñ ÐºÐ»ÑÑÑ, пÑименÑÑÑемÑÑÑ Ð¿Ñи заÑиÑном пÑеобÑазовании. ÐÑли ÑекÑеÑнÑй клÑÑ Ð·Ð°ÑиÑÑн паÑолем, ÑÑÐ¾Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð½Ñжно пеÑедаÑÑ Ð² паÑамеÑÑе psw. ÐÑли паÑÐ¾Ð»Ñ Ð½ÐµÑ, но необÑ
одимо пеÑедаÑÑ Ð¿Ð°ÑамеÑÑÑ, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÐµÑедаÑÑ Ð¿ÑÑÑой паÑолÑ.
ÐбÑаÑно пÑеобÑазовÑваÑÑ Ð´Ð°Ð½Ð½Ñе bytea ÑÑнкÑией pgp_pub_decrypt запÑеÑено. ÐÑо огÑаниÑение введено, ÑÑÐ¾Ð±Ñ Ð¸ÑклÑÑиÑÑ Ð²Ñвод недопÑÑÑимÑÑ
ÑимволÑнÑÑ
даннÑÑ
. ÐбÑаÑно пÑеобÑазовÑваÑÑ Ð¸Ð·Ð½Ð°ÑалÑно ÑекÑÑовÑе даннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ pgp_pub_decrypt_bytea можно без огÑаниÑений.
ÐÑгÑÐ¼ÐµÐ½Ñ options Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð·Ð°ÑиÑного пÑеобÑазованиÑ, опиÑаннÑе ниже.
F.36.3.5. pgp_key_id()
pgp_key_id(bytea) returns text
pgp_key_id Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÐºÐ»ÑÑа из оÑкÑÑÑого или закÑÑÑого клÑÑа PGP. Ðна Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ ÐºÐ»ÑÑа, коÑоÑÑм бÑли заÑиÑÐµÐ½Ñ Ð´Ð°Ð½Ð½Ñе, еÑли ей пеÑедаÑÑÑÑ Ð·Ð°ÑиÑÑнное ÑообÑение.
Ðна Ð¼Ð¾Ð¶ÐµÑ Ð²ÑдаÑÑ Ð´Ð²Ð° ÑпеÑиалÑнÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа клÑÑа:
SYMKEYСообÑение заÑиÑено ÑиммеÑÑиÑнÑм клÑÑом.
ANYKEYСообÑение заÑиÑено оÑкÑÑÑом клÑÑом, но иденÑиÑикаÑÐ¾Ñ ÐºÐ»ÑÑа бÑл ÑдалÑн. ÐÑо ознаÑаеÑ, ÑÑо вам надо бÑÐ´ÐµÑ Ð¿ÐµÑепÑобоваÑÑ ÐºÐ»ÑÑи, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð¾Ð±ÑаÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑий. Сама библиоÑека
pgcryptoне генеÑиÑÑÐµÑ Ñакие ÑообÑениÑ.
ÐамеÑÑÑе, ÑÑо ÑазнÑе клÑÑи могÑÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй иденÑиÑикаÑоÑ. ÐÑо Ñедкое, но не невеÑоÑÑное Ñвление. Ð Ñаком ÑлÑÑае клиенÑÑкое пÑиложение должно пÑÑаÑÑÑÑ Ð¾Ð±ÑаÑно пÑеобÑазоваÑÑ Ð´Ð°Ð½Ð½Ñе Ñ ÐºÐ°Ð¶Ð´Ñм клÑÑом, пока не найдÑÑ Ð¿Ð¾Ð´Ñ
одÑÑий â пÑимеÑно Ñак же, как и Ñ ANYKEY.
F.36.3.6. armor(), dearmor()
armor(data bytea [ , keys text[], values text[] ]) returns text dearmor(data text) returns bytea
ÐÑи ÑÑнкÑии пеÑеводÑÑ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе в/из ÑоÑмаÑа PGP «ASCII Armor», по ÑÑÑи пÑедÑÑавлÑÑÑий Ñобой кодиÑÐ¾Ð²ÐºÑ Base64 Ñ ÐºÐ¾Ð½ÑÑолÑнÑми ÑÑммами и дополниÑелÑнÑм ÑоÑмаÑиÑованием.
ÐÑли задаÑÑÑÑ Ð¼Ð°ÑÑÐ¸Ð²Ñ keys и values, Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ паÑÑ ÐºÐ»ÑÑ/знаÑÐµÐ½Ð¸Ñ Ð² ÑоÑÐ¼Ð°Ñ Armor добавлÑеÑÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ðº Armor. Ðба маÑÑива Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾Ð¼ÐµÑнÑми и имеÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²ÑÑ Ð´Ð»Ð¸Ð½Ñ. ÐадаваемÑе клÑÑи и знаÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ ÑодеÑжаÑÑ ÑолÑко ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ASCII.
F.36.3.7. pgp_armor_headers
pgp_armor_headers(data text, key out text, value out text) returns setof record
ФÑнкÑÐ¸Ñ pgp_armor_headers() Ð¸Ð·Ð²Ð»ÐµÐºÐ°ÐµÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¸ Armor из паÑамеÑÑа data. Ðна возвÑаÑÐ°ÐµÑ Ð½Ð°Ð±Ð¾Ñ ÑÑÑок Ñ Ð´Ð²ÑÐ¼Ñ ÑÑолбÑами, key и value. ÐÑли в клÑÑаÑ
или знаÑениÑÑ
оказÑваÑÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ ASCII, они воÑпÑинимаÑÑÑÑ ÐºÐ°Ðº UTF-8.
F.36.3.8. ÐаÑамеÑÑÑ ÑÑнкÑий PGP
Ðмена паÑамеÑÑов Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñ Ð¿ÑинÑÑÑм в GnuPG. ÐнаÑение паÑамеÑÑа должно задаваÑÑÑÑ Ð¿Ð¾Ñле знака Ñавно; дÑÑг Ð¾Ñ Ð´ÑÑга паÑамеÑÑÑ Ð¾ÑделÑÑÑÑÑ Ð·Ð°Ð¿ÑÑÑми. ÐапÑимеÑ:
pgp_sym_encrypt(data, psw, 'compress-algo=1, cipher-algo=aes256')
ÐÑе ÑÑи паÑамеÑÑÑ, кÑоме convert-crlf, пÑименÑÑÑÑÑ ÑолÑко к ÑÑнкÑиÑм заÑиÑного пÑеобÑазованиÑ. ФÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð¸Ð· даннÑÑ
PGP.
ÐеÑоÑÑно, ÑамÑе инÑеÑеÑнÑе паÑамеÑÑÑ â ÑÑо compress-algo и unicode-mode. ÐÑÑалÑнÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑаÑоÑно адекваÑнÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
F.36.3.8.1. cipher-algo
ÐÑбиÑÐ°ÐµÑ Ð°Ð»Ð³Ð¾ÑиÑм заÑиÑного пÑеобÑазованиÑ.
ÐнаÑениÑ: bf, aes128, aes192, aes256 (ÑолÑко OpenSSL: 3des, cast5)
Ðо ÑмолÑаниÑ: aes128
ÐÑименим к: pgp_sym_encrypt, pgp_pub_encrypt
F.36.3.8.2. compress-algo
ÐÑбиÑÐ°ÐµÑ Ð°Ð»Ð³Ð¾ÑиÑм ÑжаÑиÑ. ÐÑинимаеÑÑÑ, ÑолÑко еÑли Postgres Pro ÑобÑан Ñ zlib.
ÐнаÑениÑ:
  0 â без ÑжаÑиÑ
  1 â ÑжаÑие ZIP
  2 â ÑжаÑие ZLIB (= ZIP плÑÑ меÑаданнÑе и CRC блоков)
Ðо ÑмолÑаниÑ: 0
ÐÑименим к: pgp_sym_encrypt, pgp_pub_encrypt
F.36.3.8.3. compress-level
ÐпÑеделÑÐµÑ ÑÑÐ¾Ð²ÐµÐ½Ñ ÑжаÑиÑ. Чем болÑÑе ÑÑовенÑ, Ñем менÑÑего обÑÑма ÑезÑлÑÑаÑ, но длиÑелÑнее пÑоÑеÑÑ. ÐнаÑение 0 оÑклÑÑÐ°ÐµÑ ÑжаÑие.
ÐнаÑениÑ: 0, 1-9
Ðо ÑмолÑаниÑ: 6
ÐÑименим к: pgp_sym_encrypt, pgp_pub_encrypt
F.36.3.8.4. convert-crlf
ÐпÑеделÑеÑ, пÑеобÑазовÑваÑÑ Ð»Ð¸ \n в \r\n пÑи заÑиÑном пÑеобÑазовании и \r\n в \n пÑи обÑаÑном пÑеобÑазовании. Ð RFC 4880 ÑÑебÑеÑÑÑ, ÑÑÐ¾Ð±Ñ ÑекÑÑовÑе даннÑе Ñ
ÑанилиÑÑ Ñ Ð¿ÐµÑеводами ÑÑÑок в виде \r\n. ÐоÑполÑзÑйÑеÑÑ ÑÑим паÑамеÑÑом, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ðµ полноÑÑÑÑ ÑооÑвеÑÑÑвовало RFC.
ÐнаÑениÑ: 0, 1
Ðо ÑмолÑаниÑ: 0
ÐÑименим к: pgp_sym_encrypt, pgp_pub_encrypt, pgp_sym_decrypt, pgp_pub_decrypt
F.36.3.8.5. disable-mdc
Ðе заÑиÑаÑÑ Ð´Ð°Ð½Ð½Ñе Ñ ÐµÑем SHA-1. ÐдинÑÑÐ²ÐµÐ½Ð½Ð°Ñ ÑазÑÐ¼Ð½Ð°Ñ Ð¿ÑиÑина иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ â добиÑÑÑÑ ÑовмеÑÑимоÑÑи Ñ Ð´Ñевними пÑогÑаммами PGP, вÑÑедÑими до Ñого, как в RFC 4880 бÑла пÑедÑÑмоÑÑена заÑиÑа пакеÑов Ñ SHA-1. ÐÑе поÑледние ÑеализаÑии Ñ gnupg.org и pgp.com пÑекÑаÑно поддеÑживаÑÑ ÑÑо.
ÐнаÑениÑ: 0, 1
Ðо ÑмолÑаниÑ: 0
ÐÑименим к: pgp_sym_encrypt, pgp_pub_encrypt
F.36.3.8.6. sess-key
ÐÑполÑзоваÑÑ Ð¾ÑделÑнÑй ÑеанÑовÑй клÑÑ. ÐÐ»Ñ Ð·Ð°ÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾ÑкÑÑÑÑм клÑÑом вÑегда иÑполÑзÑеÑÑÑ Ð¾ÑделÑнÑй ÑеанÑовÑй клÑÑ; ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿ÑедназнаÑен Ð´Ð»Ñ Ð·Ð°ÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ ÑиммеÑÑиÑнÑм клÑÑом, коÑоÑое по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸ÑполÑзÑÐµÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно клÑÑ S2K.
ÐнаÑениÑ: 0, 1
Ðо ÑмолÑаниÑ: 0
ÐÑименим к: pgp_sym_encrypt
F.36.3.8.7. s2k-mode
Режим алгоÑиÑма S2K.
ÐнаÑениÑ:
  0 â Ðез Ñоли. ÐпаÑно!
  1 â С ÑолÑÑ, но Ñ ÑикÑиÑованнÑм ÑиÑлом иÑеÑаÑий.
  3 â С пеÑеменнÑм ÑиÑлом иÑеÑаÑий.
Ðо ÑмолÑаниÑ: 3
ÐÑименим к: pgp_sym_encrypt
F.36.3.8.8. s2k-count
ЧиÑло иÑеÑаÑий Ð´Ð»Ñ Ð°Ð»Ð³Ð¾ÑиÑма S2K. Ðно должно бÑÑÑ Ð½Ðµ менÑÑе 1024 и не болÑÑе 65011712.
Ðо ÑмолÑаниÑ: ÑлÑÑайное знаÑение междÑ 65536 и 253952
ÐÑименим к: pgp_sym_encrypt, ÑолÑко Ñ s2k-mode=3
F.36.3.8.9. s2k-digest-algo
ÐÑбиÑÐ°ÐµÑ Ð°Ð»Ð³Ð¾ÑиÑм Ñ ÐµÑиÑованиÑ, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð²ÑÑиÑÐ»ÐµÐ½Ð¸Ñ S2K.
ÐнаÑениÑ: md5, sha1
Ðо ÑмолÑаниÑ: sha1
ÐÑименим к: pgp_sym_encrypt
F.36.3.8.10. s2k-cipher-algo
ÐÑбиÑÐ°ÐµÑ Ð·Ð°ÑиÑное пÑеобÑазование, коÑоÑÑй бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¾ÑделÑного ÑеанÑового клÑÑа.
ÐнаÑениÑ: bf, aes, aes128, aes192, aes256
Ðо ÑмолÑаниÑ: иÑполÑзÑеÑÑÑ cipher-algo
ÐÑименим к: pgp_sym_encrypt
F.36.3.8.11. unicode-mode
ÐпÑеделÑеÑ, пÑеобÑазовÑваÑÑ Ð»Ð¸ ÑекÑÑовÑе даннÑе из внÑÑÑенней кодиÑовки Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² UTF-8 и обÑаÑно. ÐÑли кодиÑовка Ð±Ð°Ð·Ñ Ñже UTF-8, пеÑекодиÑовка не пÑоизводиÑÑÑ, но ÑообÑение помеÑаеÑÑÑ ÐºÐ°Ðº UTF-8. Ðез данного паÑамеÑÑа ÑÑого не пÑоиÑÑ Ð¾Ð´Ð¸Ñ.
ÐнаÑениÑ: 0, 1
Ðо ÑмолÑаниÑ: 0
ÐÑименим к: pgp_sym_encrypt, pgp_pub_encrypt
F.36.3.9. ФоÑмиÑование клÑÑей PGP Ñ Ð¿Ñименением GnuPG
ФоÑмиÑование нового клÑÑа:
gpg --gen-key
ÐÑедпоÑиÑаемÑй Ñип клÑÑей: «DSA and Elgamal».
ÐÐ»Ñ Ð·Ð°ÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ RSA Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоздаÑÑ Ð³Ð»Ð°Ð²Ð½Ñй клÑÑ Ð»Ð¸Ð±Ð¾ DSA, либо RSA ÑолÑко Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑаниÑ, а заÑем добавиÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑ Ð´Ð»Ñ Ð·Ð°ÑиÑного пÑеобÑазованиÑ, вÑполнив ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ gpg --edit-key.
ÐÑоÑмоÑÑ ÑпиÑка клÑÑей:
gpg --list-secret-keys
ÐкÑпоÑÑ Ð¾ÑкÑÑÑого клÑÑа в ÑоÑмаÑе «ASCII Armor»:
gpg -a --export KEYID > public.key
ÐкÑпоÑÑ Ð·Ð°ÐºÑÑÑого клÑÑа в ÑоÑмаÑе «ASCII Armor»:
gpg -a --export-secret-keys KEYID > secret.key
ÐÑежде Ñем пеÑедаваÑÑ ÑÑи клÑÑи ÑÑнкÑиÑм PGP, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑимениÑÑ ÑÑнкÑÐ¸Ñ dearmor() к ÑÑим клÑÑам. Ðибо, еÑли Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑабоÑаÑÑ Ð´Ð²Ð¾Ð¸ÑнÑе даннÑе, ÑбеÑиÑе -a из командÑ.
ÐополниÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð² ÑÑководÑÑве man gpg, The GNU Privacy Handbook (Ð ÑководÑÑво GNU по обеÑпеÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑиденÑиалÑноÑÑи) и дÑÑгой докÑменÑаÑии на ÑайÑе https://www.gnupg.org/.
F.36.3.10. ÐгÑаниÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° PGP
Ðе поддеÑживаеÑÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑвание. ÐÑо Ñакже ознаÑаеÑ, ÑÑо пÑинадлежноÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑа заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¼Ñ ÐºÐ»ÑÑÑ Ð½Ðµ пÑовеÑÑеÑÑÑ.
Ðе поддеÑживаеÑÑÑ Ð¸ÑполÑзование клÑÑа заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² каÑеÑÑве главного клÑÑа. Так как Ð¿Ð¾Ð´Ð¾Ð±Ð½Ð°Ñ Ð¿ÑакÑика обÑÑно не пÑивеÑÑÑвÑеÑÑÑ, ÑÑо не должно бÑÑÑ Ð¿Ñоблемой.
ÐÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑжки неÑколÑÐºÐ¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑей. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедÑÑавлÑÑÑÑÑ Ð¿Ñоблемой, Ñак как Ñакие клÑÑи не ÑедкоÑÑÑ. С дÑÑгой ÑÑоÑонÑ, Ð²Ñ Ð²ÑÑ Ñавно не Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸ÑполÑзоваÑÑ Ð¾Ð±ÑÑнÑе клÑÑи GPG/PGP Ñ
pgcrypto, а Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоздаÑÑ Ð½Ð¾Ð²Ñе, ÑÑиÑÑваÑ, ÑÑо ÑÑо дÑÑгой ÑÑенаÑий иÑполÑзованиÑ.
F.36.4. ÐизкоÑÑовневÑе ÑÑнкÑии заÑиÑного пÑеобÑазованиÑ
ÐÑи ÑÑнкÑии вÑполнÑÑÑ ÑолÑко заÑиÑное пÑеобÑазование даннÑÑ ; они не пÑедоÑÑавлÑÑÑ ÑаÑÑиÑеннÑе возможноÑÑи заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ PGP. Таким обÑазом, Ñ Ð½Ð¸Ð¼Ð¸ ÑвÑÐ·Ð°Ð½Ñ ÑледÑÑÑие пÑоблемÑ:
Ðни иÑполÑзÑÑÑ ÐºÐ»ÑÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в каÑеÑÑве клÑÑа заÑиÑного пÑеобÑазованиÑ.
Ðни не обеÑпеÑиваÑÑ Ð¿ÑовеÑÐºÑ ÑелоÑÑноÑÑи, коÑоÑÐ°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° вÑÑвлÑÑÑ Ð¼Ð¾Ð´Ð¸ÑикаÑÐ¸Ñ Ð·Ð°ÑиÑÑннÑÑ Ð´Ð°Ð½Ð½ÑÑ .
Ðни ÑаÑÑÑиÑÐ°Ð½Ñ Ð½Ð° Ñо, ÑÑо полÑзоваÑели бÑдÑÑ ÑпÑавлÑÑÑ Ð²Ñеми паÑамеÑÑами заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑамоÑÑоÑÑелÑно, даже векÑоÑом иниÑиализаÑии.
Ðни не ÑаÑÑÑиÑÐ°Ð½Ñ Ð½Ð° ÑекÑÑ.
ÐоÑÑÐ¾Ð¼Ñ Ñ Ð¿Ð¾Ñвлением поддеÑжки заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ PGP иÑполÑзоваÑÑ Ð½Ð¸Ð·ÐºÐ¾ÑÑовневÑе ÑÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ ÑекомендÑеÑÑÑ.
encrypt(data bytea, key bytea, type text) returns bytea decrypt(data bytea, key bytea, type text) returns bytea encrypt_iv(data bytea, key bytea, iv bytea, type text) returns bytea decrypt_iv(data bytea, key bytea, iv bytea, type text) returns bytea
ÐÑи ÑÑнкÑии пÑоизводÑÑ Ð¿ÑÑмое и обÑаÑное заÑиÑное пÑеобÑазование даннÑÑ
, пÑименÑÑ Ð¼ÐµÑод, заданнÑй паÑамеÑÑом type. СÑÑока type Ð¸Ð¼ÐµÐµÑ ÑледÑÑÑий ÑоÑмаÑ:
алгоÑиÑм[-Ñежим] [/pad:дозаполнение]
где допÑÑÑимÑй алгоÑиÑм:
bfâ Blowfishaesâ AES (Rijndael-128, -192 или -256)
допÑÑÑимÑй Ñежим:
cbcâ ÑледÑÑÑий блок завиÑÐ¸Ñ Ð¾Ñ Ð¿ÑедÑдÑÑего (по ÑмолÑаниÑ)ecbâ каждÑй блок заÑиÑаеÑÑÑ Ð¾ÑделÑно (ÑолÑко Ð´Ð»Ñ ÑеÑÑиÑованиÑ)
и допÑÑÑимое дозаполнение:
pkcsâ даннÑе могÑÑ Ð±ÑÑÑ Ð»Ñбой Ð´Ð»Ð¸Ð½Ñ (по ÑмолÑаниÑ)noneâ ÑÐ°Ð·Ð¼ÐµÑ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÐºÑаÑен ÑазмеÑÑ Ð±Ð»Ð¾ÐºÐ° заÑиÑного пÑеобÑазованиÑ
Так ÑÑо, напÑимеÑ, ÑÑи вÑÐ·Ð¾Ð²Ñ ÑавнознаÑнÑ:
encrypt(data, 'fooz', 'bf') encrypt(data, 'fooz', 'bf-cbc/pad:pkcs')
ÐÐ»Ñ ÑÑнкÑий encrypt_iv и decrypt_iv паÑамеÑÑ iv задаÑÑ Ð½Ð°ÑалÑное знаÑение Ð´Ð»Ñ Ñежима CBC; Ð´Ð»Ñ ECB он игноÑиÑÑеÑÑÑ. Ðно обÑезаеÑÑÑ Ð¸Ð»Ð¸ дополнÑеÑÑÑ Ð½ÑлÑми, еÑли его ÑÐ°Ð·Ð¼ÐµÑ Ð½Ðµ Ñавен Ñовно ÑазмеÑÑ Ð±Ð»Ð¾ÐºÐ°. Ð ÑÑнкÑиÑÑ
без ÑÑого паÑамеÑÑа оно по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÑеÑÑÑ Ð½ÑлÑми.
F.36.5. ФÑнкÑии полÑÑÐµÐ½Ð¸Ñ ÑлÑÑайнÑÑ Ð´Ð°Ð½Ð½ÑÑ
gen_random_bytes(count integer) returns bytea
ÐозвÑаÑÐ°ÐµÑ Ð·Ð°ÑиÑÑннÑе ÑÑойкие ÑлÑÑайнÑе байÑÑ Ð² колиÑеÑÑве count. Ðа один вÑзов можно полÑÑиÑÑ Ð¼Ð°ÐºÑимÑм 1024 байÑ. ÐÑо огÑаниÑение пÑедоÑвÑаÑÐ°ÐµÑ Ð¸ÑÑеÑпание пÑла ÑнÑÑопии.
gen_random_uuid() returns uuid
ÐозвÑаÑÐ°ÐµÑ UUID веÑÑии 4 (ÑлÑÑайнÑй). (ÐÑа ÑÑнкÑÐ¸Ñ Ð² данном модÑле ÑÑиÑаеÑÑÑ ÑÑÑаÑевÑей, она вÑзÑÐ²Ð°ÐµÑ Ð¾Ð´Ð½Ð¾Ð¸Ð¼ÑннÑÑ ÑÑнкÑÐ¸Ñ ÑдÑа.)
F.36.6. ÐÑимеÑаниÑ
F.36.6.1. ÐонÑигÑÑиÑование
ÐодÑÐ»Ñ pgcrypto наÑÑÑаиваеÑÑÑ ÑоглаÑно ÑÑÑановкам, полÑÑеннÑм в главном ÑкÑипÑе configure Postgres Pro. Ðа его конÑигÑÑаÑÐ¸Ñ Ð²Ð»Ð¸ÑÑÑ Ð°ÑгÑменÑÑ --with-zlib и --with-ssl=openssl.
ÐÑи компилÑÑии Ñ zlib ÑÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ PGP могÑÑ ÑжимаÑÑ Ð´Ð°Ð½Ð½Ñе пеÑед пÑименением пÑеобÑазованиÑ.
ÐÑи компилÑÑии Ñ OpenSSL бÑдÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе алгоÑиÑмÑ. ÐÑоме Ñого, ÑÑнкÑии заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñ Ð¾ÑкÑÑÑÑм клÑÑом бÑдÑÑ Ð±ÑÑÑÑее, Ñак как OpenSSL ÑодеÑÐ¶Ð¸Ñ Ð±Ð¾Ð»ÑÑе опÑимизиÑованнÑÑ ÑÑнкÑий Ð´Ð»Ñ ÑабоÑÑ Ñ Ð±Ð¾Ð»ÑÑими ÑиÑлами (BIGNUM).
ТаблиÑа F.24. ÐÐ±Ð·Ð¾Ñ ÑÑнкÑионалÑноÑÑи Ñ Ð¸ без OpenSSL
| ФÑнкÑионалÑноÑÑÑ | ÐÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ | С OpenSSL |
|---|---|---|
| MD5 | да | да |
| SHA1 | да | да |
| SHA224/256/384/512 | да | да |
| ÐÑÑгие алгоÑиÑÐ¼Ñ Ñ ÐµÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ | Ð½ÐµÑ | да (ÐÑимеÑание 1) |
| Blowfish | да | да |
| AES | да | да |
| DES/3DES/CAST5 | Ð½ÐµÑ | да |
| ÐизкоÑÑовневое заÑиÑное пÑеобÑазование | да | да |
| СиммеÑÑиÑное заÑиÑное пÑеобÑазование PGP | да | да |
| ÐаÑиÑное пÑеобÑазование PGP Ñ Ð¾ÑкÑÑÑÑм клÑÑом | да | да |
ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑÑаÑевÑие алгоÑиÑÐ¼Ñ Ð·Ð°ÑиÑного пÑеобÑазованиÑ, Ñакие как DES или Blowfish, пÑи компилÑÑии Ñ OpenSSL веÑÑии 3.0.0 и вÑÑе, нÑжно акÑивиÑоваÑÑ Ð¿Ð¾ÑÑавÑиков ÑÑиÑ
алгоÑиÑмов в Ñайле конÑигÑÑаÑии openssl.cnf.
ÐамеÑаниÑ:
ÐвÑомаÑиÑеÑки вÑбиÑаеÑÑÑ Ð»Ñбой алгоÑиÑм Ñ ÐµÑиÑованиÑ, коÑоÑÑй поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ OpenSSL. ÐÑо невозможно Ñ Ð²Ð¸Ð´Ð°Ð¼Ð¸ заÑиÑного пÑеобÑазованиÑ, они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ Ñвно.
F.36.6.2. ÐбÑабоÑка NULL
Ðак и положено по ÑÑандаÑÑÑ SQL, вÑе ÑÑи ÑÑнкÑии возвÑаÑаÑÑ NULL, еÑли один из аÑгÑменÑов â NULL. ÐÑо Ð¼Ð¾Ð¶ÐµÑ ÑгÑожаÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи пÑи неаккÑÑаÑном иÑполÑзовании.
F.36.6.3. ÐгÑаниÑÐµÐ½Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи
ÐÑе ÑÑнкÑии pgcrypto вÑполнÑÑÑÑÑ Ð²Ð½ÑÑÑи ÑеÑвеÑа баз даннÑÑ
. ÐÑо ознаÑаеÑ, ÑÑо вÑе даннÑе и паÑоли пеÑедаÑÑÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑÑнкÑиÑми pgcrypto и клиенÑÑкими пÑиложениÑми оÑкÑÑÑÑм ÑекÑÑом. ÐоÑÑÐ¾Ð¼Ñ Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ:
ÐодклÑÑаÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно или иÑполÑзоваÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ SSL.
ÐовеÑÑÑÑ Ð¸ ÑиÑÑеме, и админиÑÑÑаÑоÑÑ Ð±Ð°Ð· даннÑÑ .
ÐÑли ÑÑо невозможно, лÑÑÑе пÑоизвеÑÑи заÑиÑное пÑеобÑазование в клиенÑÑком пÑиложении.
ÐÑа ÑеализаÑÐ¸Ñ Ð½Ðµ пÑоÑивоÑÑÐ¾Ð¸Ñ Ð°Ñакам по ÑÑоÑонним каналам. ÐапÑимеÑ, вÑемÑ, ÑÑебÑÑÑееÑÑ Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑнкÑии обÑаÑного заÑиÑного пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ pgcrypto, бÑÐ´ÐµÑ ÑазнÑм Ð´Ð»Ñ Ñазного заÑиÑÑнного ÑекÑÑа заданного ÑазмеÑа.
F.36.7. ÐвÑоÑ
ÐаÑко ÐÑин <[email protected]>
ÐодÑÐ»Ñ pgcrypto заимÑÑвÑÐµÑ ÐºÐ¾Ð´ из ÑледÑÑÑиÑ
иÑÑоÑников:
| ÐлгоÑиÑм | ÐвÑÐ¾Ñ | ÐÑÑоÑник иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ кода |
|---|---|---|
| ÐаÑиÑное пÑеобÑазование DES | ÐÑвид ÐÑÑÑен и дÑÑгие | FreeBSD, libcrypt |
| ХеÑиÑование MD5 | Ðол-Хеннинг Ðамп | FreeBSD, libcrypt |
| ÐаÑиÑное пÑеобÑазование Blowfish | Solar Designer | www.openwall.com |
| ШиÑÑ Blowfish | Саймон ТÑÑем | PuTTY |
| ШиÑÑ Rijndael | ÐÑайан ÐлÑдмен | OpenBSD, sys/crypto |
| Ð¥ÐµÑ MD5 и SHA1 | ÐÑÐ¾ÐµÐºÑ WIDE | KAME, kame/sys/crypto |
| SHA256/384/512 | ÐаÑон Ð. ÐиÑÑоÑд | OpenBSD, sys/crypto |
| ÐаÑемаÑика BIGNUM | Ðайкл Ðж. ФÑомбеÑÐ³ÐµÑ | dartmouth.edu/~sting/sw/imath |