The <filename>pgcrypto</filename> module provides cryptographic functions for
<productname>PostgreSQL</productname>.
pgcrypto
モジュールはPostgreSQL用の暗号関数を提供します。
This module is considered <quote>trusted</quote>, that is, it can be
installed by non-superusers who have <literal>CREATE</literal> privilege
on the current database.
このモジュールは「trusted」と見なされます。つまり、現在のデータベースに対してCREATE
権限を持つ非スーパーユーザがインストールできます。
<filename>pgcrypto</filename> requires OpenSSL and won't be installed if
OpenSSL support was not selected when PostgreSQL was built.
pgcrypto
はOpenSSLを必要とし、PostgreSQLの構築時にOpenSSLサポートが選択されなかった場合にはインストールされません。
digest()
#digest(data text, type text) returns bytea digest(data bytea, type text) returns bytea
Computes a binary hash of the given <parameter>data</parameter>.
<parameter>type</parameter> is the algorithm to use.
Standard algorithms are <literal>md5</literal>, <literal>sha1</literal>,
<literal>sha224</literal>, <literal>sha256</literal>,
<literal>sha384</literal> and <literal>sha512</literal>.
Moreover, any digest algorithm <productname>OpenSSL</productname> supports
is automatically picked up.
与えられたdata
のバイナリハッシュを計算します。
type
は使用するアルゴリズムです。
標準アルゴリズムはmd5
、sha1
、sha224
、sha256
、sha384
、およびsha512
です。
さらに、OpenSSLがサポートするダイジェストアルゴリズムが自動的に選択されます。
If you want the digest as a hexadecimal string, use
<function>encode()</function> on the result. For example:
ダイジェストを16進数表記の文字列としたい場合は、結果に対してencode()
を使用してください。
以下に例を示します。
CREATE OR REPLACE FUNCTION sha1(bytea) returns text AS $$ SELECT encode(digest($1, 'sha1'), 'hex') $$ LANGUAGE SQL STRICT IMMUTABLE;
hmac()
#hmac(data text, key text, type text) returns bytea hmac(data bytea, key bytea, type text) returns bytea
Calculates hashed MAC for <parameter>data</parameter> with key <parameter>key</parameter>.
<parameter>type</parameter> is the same as in <function>digest()</function>.
key
をキーとしたdata
のハッシュ化MACを計算します。
type
はdigest()
の場合と同じです。
This is similar to <function>digest()</function> but the hash can only be
recalculated knowing the key. This prevents the scenario of someone
altering data and also changing the hash to match.
digest()
と似ていますが、ハッシュはキーを知っている場合にのみ再計算できます。
これは、誰かがデータを変更し、同時に一致するようにハッシュを変更するという状況を防ぎます。
If the key is larger than the hash block size it will first be hashed and the result will be used as key. キーがハッシュブロックサイズより大きい場合、まずハッシュ化され、その結果をキーとして使用します。
The functions <function>crypt()</function> and <function>gen_salt()</function>
are specifically designed for hashing passwords.
<function>crypt()</function> does the hashing and <function>gen_salt()</function>
prepares algorithm parameters for it.
crypt()
およびgen_salt()
関数は特にパスワードのハッシュ化のために設計されたものです。
crypt()
がハッシュ処理を行い、gen_salt()
はハッシュ処理用のアルゴリズム上のパラメータを準備します。
The algorithms in <function>crypt()</function> differ from the usual
MD5 or SHA1 hashing algorithms in the following respects:
crypt()
アルゴリズムは、以下の点で通常のMD5やSHA1のようなハッシュ処理アルゴリズムと異なります。
They are slow. As the amount of data is so small, this is the only way to make brute-forcing passwords hard. 低速です。 データ量が少ないためパスワード総当たり攻撃に対して頑健にする唯一の方法です。
They use a random value, called the <firstterm>salt</firstterm>, so that users having the same password will have different encrypted passwords. This is also an additional defense against reversing the algorithm. 結果にはソルトというランダムな値が含まれます。 このため同じパスワードのユーザでも異なった暗号化パスワードを持ちます。 これはアルゴリズムの逆処理に対する追加の防御です。
They include the algorithm type in the result, so passwords hashed with different algorithms can co-exist. 結果内にアルゴリズムの種類が含まれます。 このため異なるアルゴリズムでハッシュ化したパスワードが混在可能です。
Some of them are adaptive — that means when computers get faster, you can tune the algorithm to be slower, without introducing incompatibility with existing passwords. 一部は適応型です。 つまり、コンピュータが高速になったとしても、既存のパスワードとの互換性を損なうことなくアルゴリズムを低速に調整することができます。
<xref linkend="pgcrypto-crypt-algorithms"/> lists the algorithms
supported by the <function>crypt()</function> function.
crypt()
関数がサポートするアルゴリズムを表 F.17に列挙します。
表F.17 crypt()
がサポートするアルゴリズム
アルゴリズム | パスワード最大長 | 適応型かどうか | ソルトビット長 | 出力長 | 説明 |
---|---|---|---|---|---|
bf | 72 | はい | 128 | 60 | Blowfishベース、2a版 |
md5 | 無制限 | いいえ | 48 | 34 | MD5ベースの暗号 |
xdes | 8 | はい | 24 | 20 | 拡張DES |
des | 8 | いいえ | 12 | 13 | 元来のUNIX crypt |
crypt()
#crypt(password text, salt text) returns text
Calculates a crypt(3)-style hash of <parameter>password</parameter>.
When storing a new password, you need to use
<function>gen_salt()</function> to generate a new <parameter>salt</parameter> value.
To check a password, pass the stored hash value as <parameter>salt</parameter>,
and test whether the result matches the stored value.
password
のcrypt(3)形式のハッシュを計算します。
新しいパスワードを保管する時には、gen_salt()
を使用して新しいsalt
を生成する必要があります。
パスワードを検査する時、既存のハッシュ値をsalt
として渡し、結果が格納された値と一致するかどうかを確認します。
Example of setting a new password: 新しいパスワードの設定例を以下に示します。
UPDATE ... SET pswhash = crypt('new password', gen_salt('md5'));
Example of authentication: 認証の例です。
SELECT (pswhash = crypt('entered password', pswhash)) AS pswmatch FROM ... ;
This returns <literal>true</literal> if the entered password is correct.
入力パスワードが正しければtrue
を返します。
gen_salt()
#gen_salt(type text [, iter_count integer ]) returns text
Generates a new random salt string for use in <function>crypt()</function>.
The salt string also tells <function>crypt()</function> which algorithm to use.
crypt()
で使用するランダムなソルト文字列を新規に生成します。
また、このソルト文字列はcrypt()
にどのアルゴリズムを使用するかを通知します。
The <parameter>type</parameter> parameter specifies the hashing algorithm.
The accepted types are: <literal>des</literal>, <literal>xdes</literal>,
<literal>md5</literal> and <literal>bf</literal>.
type
パラメータはハッシュ化アルゴリズムを指定します。
受付可能な種類は、des
、xdes
、md5
、bf
です。
The <parameter>iter_count</parameter> parameter lets the user specify the iteration
count, for algorithms that have one.
The higher the count, the more time it takes to hash
the password and therefore the more time to break it. Although with
too high a count the time to calculate a hash may be several years
— which is somewhat impractical. If the <parameter>iter_count</parameter>
parameter is omitted, the default iteration count is used.
Allowed values for <parameter>iter_count</parameter> depend on the algorithm and
are shown in <xref linkend="pgcrypto-icfc-table"/>.
繰り返し回数を持つアルゴリズムでは、ユーザはiter_count
パラメータを使用して繰り返し回数を指定できます。
指定する回数を高くすれば、パスワードのハッシュ化にかかる時間が長くなり、それを破るための時間も長くなります。
しかし、あまりに多くの回数を指定すると、ハッシュ計算にかかる時間は数年に渡ってしまう可能性があります。
これは実用的ではありません。
iter_count
パラメータを省略した場合、デフォルトの繰り返し回数が使用されます。
iter_count
で受け付けられる値はアルゴリズムに依存し、表 F.18に示す通りです。
表F.18 crypt()
用の繰り返し回数
アルゴリズム | デフォルト | 最小 | 最大 |
---|---|---|---|
xdes | 725 | 1 | 16777215 |
bf | 6 | 4 | 31 |
For <literal>xdes</literal> there is an additional limitation that the
iteration count must be an odd number.
xdes
の場合は他にも、回数が奇数でなければならないという制限があります。
To pick an appropriate iteration count, consider that the original DES crypt was designed to have the speed of 4 hashes per second on the hardware of that time. Slower than 4 hashes per second would probably dampen usability. Faster than 100 hashes per second is probably too fast. 適切な繰り返し回数を選択するために、元々のDES暗号は当時のハードウェアで1秒あたり4個のハッシュを持つことができるように設計されたことを考えてください。 毎秒4ハッシュより遅いと、おそらく使い勝手が悪いでしょう。 毎秒100ハッシュより速いというのは、十中八九、あまりにも速すぎるでしょう。
<xref linkend="pgcrypto-hash-speed-table"/> gives an overview of the relative slowness
of different hashing algorithms.
The table shows how much time it would take to try all
combinations of characters in an 8-character password, assuming
that the password contains either only lower case letters, or
upper- and lower-case letters and numbers.
In the <literal>crypt-bf</literal> entries, the number after a slash is
the <parameter>iter_count</parameter> parameter of
<function>gen_salt</function>.
ハッシュ化アルゴリズム別に相対的な速度に関する概要を表 F.19にまとめました。
この表は、8文字のパスワード内のすべての文字の組合せを取るためにかかる時間を示します。
また、すべて小文字の英字のみのパスワードである場合と大文字小文字が混在した英字と数字のパスワードの場合を仮定します。
crypt-bf
の項では、スラッシュの後の数値はgen_salt
のiter_count
です。
表F.19 ハッシュアルゴリズムの速度
アルゴリズム | 1秒当たりのハッシュ数 | [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 |
Notes: 注意:
The machine used is an Intel Mobile Core i3. Intel Mobile Core i3のマシンを使用しました。
<literal>crypt-des</literal> and <literal>crypt-md5</literal> algorithm numbers are
taken from John the Ripper v1.6.38 <literal>-test</literal> output.
crypt-des
およびcrypt-md5
アルゴリズムの数値はJohn the Ripper v1.6.38の-test
出力から得たものです。
<literal>md5 hash</literal> numbers are from mdcrack 1.2.
md5ハッシュ
の数値はmdcrack 1.2のものです。
<literal>sha1</literal> numbers are from lcrack-20031130-beta.
sha1
の数値はlcrack-20031130-betaのものです。
<literal>crypt-bf</literal> numbers are taken using a simple program that
loops over 1000 8-character passwords. That way the speed
with different numbers of iterations can be shown. For reference: <literal>john
-test</literal> shows 13506 loops/sec for <literal>crypt-bf/5</literal>.
(The very small
difference in results is in accordance with the fact that the
<literal>crypt-bf</literal> implementation in <filename>pgcrypto</filename>
is the same one used in John the Ripper.)
crypt-bf
の数は、1000個の8文字パスワードをループする単純なプログラムを使用して得たものです。
こうして、異なる回数の速度を示すことができました。
参考までに、john -test
はcrypt-bf/5
で13506 loops/secでした。
(結果の差異が非常に小さいことは、pgcrypto
におけるcrypt-bf
実装がJohn the Ripperで使用されるものと同じであるという事実と一致します。)
Note that <quote>try all combinations</quote> is not a realistic exercise. Usually password cracking is done with the help of dictionaries, which contain both regular words and various mutations of them. So, even somewhat word-like passwords could be cracked much faster than the above numbers suggest, while a 6-character non-word-like password may escape cracking. Or not. 「すべての組み合わせを試行する」ことは現実的な行使ではありません。 通常パスワード推定は、普通の単語とその変形の両方を含む辞書を使用して行われます。 ですので、いささかなりとも言葉に似たパスワードは上で示した数値よりも速く推定されます。 また6文字の単語に似ていないパスワードは推定を免れるかもしれませんし、免れないかもしれません。
The functions here implement the encryption part of the OpenPGP (<ulink url="https://datatracker.ietf.org/doc/html/rfc4880">RFC 4880</ulink>) standard. Supported are both symmetric-key and public-key encryption. ここで示す関数はOpenPGP((RFC 4880)標準の暗号処理部分を実装します。 対称鍵および公開鍵暗号化がサポートされます。
An encrypted PGP message consists of 2 parts, or <firstterm>packets</firstterm>: 暗号化されたPGPメッセージは次の2つの部品(またはパケット)から構成されます。
Packet containing a session key — either symmetric-key or public-key encrypted. セッションキーを含むパケット。 対称鍵または公開鍵で暗号化されています。
Packet containing data encrypted with the session key. セッションキーにより暗号化されたデータを含むパケット。
When encrypting with a symmetric key (i.e., a password): 対称鍵(つまりパスワード)で暗号化する場合
The given password is hashed using a String2Key (S2K) algorithm. This is
rather similar to <function>crypt()</function> algorithms — purposefully
slow and with random salt — but it produces a full-length binary
key.
与えられたパスワードはString2Key(S2K)アルゴリズムでハッシュ化されます。
これはどちらかというとcrypt()
アルゴリズムと似て、意図的に低速で、かつランダムなソルトを使用します。
しかし、全長のバイナリキーを生成します。
If a separate session key is requested, a new random key will be generated. Otherwise the S2K key will be used directly as the session key. 分離したセッションキーが要求された場合、新しいランダムなキーが生成されます。 さもなくば、S2Kキーがそのままセッションキーとして使用されます。
If the S2K key is to be used directly, then only S2K settings will be put into the session key packet. Otherwise the session key will be encrypted with the S2K key and put into the session key packet. S2Kキーがそのまま使用される場合、S2K設定のみがセッションキーパケットに格納されます。 さもなくば、セッションキーはS2Kキーで暗号化され、セッションキーパケットに格納されます。
When encrypting with a public key: 公開鍵で暗号化する場合
A new random session key is generated. 新しいランダムなセッションキーが生成されます。
It is encrypted using the public key and put into the session key packet. これは公開鍵を使用して暗号化され、セッションキーパケットに格納されます。
In either case the data to be encrypted is processed as follows: どちらの場合でもデータ暗号化は以下のように処理されます。
Optional data-manipulation: compression, conversion to UTF-8, and/or conversion of line-endings. 省略可能なデータ操作として、圧縮、UTF-8への変換、改行の変換があります。
The data is prefixed with a block of random bytes. This is equivalent to using a random IV. データの前にはランダムなバイト数のブロックが付きます。 これはrandom IVを使用する場合と同じです。
A SHA1 hash of the random prefix and data is appended. ランダムな前置ブロックとデータのSHA1ハッシュが後に付けられます。
All this is encrypted with the session key and placed in the data packet. これをすべてセッションキーで暗号化し、データパケットに格納します。
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
Encrypt <parameter>data</parameter> with a symmetric PGP key <parameter>psw</parameter>.
The <parameter>options</parameter> parameter can contain option settings,
as described below.
対称PGPキーpsw
でdata
を暗号化します。
options
パラメータには後述のオプション設定を含めることができます。
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
Decrypt a symmetric-key-encrypted PGP message. 対称鍵で暗号化されたPGPメッセージを復号します。
Decrypting <type>bytea</type> data with <function>pgp_sym_decrypt</function> is disallowed.
This is to avoid outputting invalid character data. Decrypting
originally textual data with <function>pgp_sym_decrypt_bytea</function> is fine.
pgp_sym_decrypt
でbytea
型のデータを復号することはできません。
これは無効な文字データの出力を防止するためです。
元のテキストのデータをpgp_sym_decrypt_bytea
で復号することが正しい方法です。
The <parameter>options</parameter> parameter can contain option settings,
as described below.
options
パラメータには後述のオプション設定を含めることができます。
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
Encrypt <parameter>data</parameter> with a public PGP key <parameter>key</parameter>.
Giving this function a secret key will produce an error.
公開PGPキーkey
でdata
を暗号化します。
この関数に秘密キーを与えるとエラーになります。
The <parameter>options</parameter> parameter can contain option settings,
as described below.
options
パラメータには後述のオプション設定を含めることができます。
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
Decrypt a public-key-encrypted message. <parameter>key</parameter> must be the
secret key corresponding to the public key that was used to encrypt.
If the secret key is password-protected, you must give the password in
<parameter>psw</parameter>. If there is no password, but you want to specify
options, you need to give an empty password.
公開鍵で暗号化されたメッセージを復号します。
key
は、暗号化に使用した公開鍵に対応する秘密鍵でなければなりません。
秘密鍵がパスワードで保護されている場合は、そのパスワードをpsw
で指定しなければなりません。
パスワードはないが、オプションを指定したい場合は空のパスワードを指定する必要があります。
Decrypting <type>bytea</type> data with <function>pgp_pub_decrypt</function> is disallowed.
This is to avoid outputting invalid character data. Decrypting
originally textual data with <function>pgp_pub_decrypt_bytea</function> is fine.
pgp_pub_decrypt
でbytea
型のデータを復号することはできません。
これは無効な文字データの出力を防止するためです。
元のテキストのデータをpgp_pub_decrypt_bytea
で復号することが正しい方法です。
The <parameter>options</parameter> parameter can contain option settings,
as described below.
options
パラメータには後述のオプション設定を含めることができます。
pgp_key_id()
#pgp_key_id(bytea) returns text
<function>pgp_key_id</function> extracts the key ID of a PGP public or secret key.
Or it gives the key ID that was used for encrypting the data, if given
an encrypted message.
pgp_key_id
はPGP公開鍵または秘密鍵のキーIDを取り出します。
暗号化されたメッセージが指定された場合は、データの暗号化に使用されたキーIDを与えます。
It can return 2 special key IDs: 2つの特殊なキーIDを返すことがあります。
SYMKEY
The message is encrypted with a symmetric key. メッセージは対称鍵で暗号化されました。
ANYKEY
The message is public-key encrypted, but the key ID has been removed.
That means you will need to try all your secret keys on it to see
which one decrypts it. <filename>pgcrypto</filename> itself does not produce
such messages.
メッセージは公開鍵で暗号化されましたが、キーIDが消去されていました。
つまり、どれで復号できるかを判定するためにはすべての秘密キーを試行しなければならないことを意味します。
pgcrypto
自身はこうしたメッセージを生成しません。
Note that different keys may have the same ID. This is rare but a normal
event. The client application should then try to decrypt with each one,
to see which fits — like handling <literal>ANYKEY</literal>.
異なるキーが同一IDを持つ場合があることに注意してください。
これは稀ですが、正常なイベントです。
この場合クライアントアプリケーションはどちらが当てはまるかを調べるために、ANYKEY
の場合と同様に、それぞれのキーで復号を試行しなければなりません。
armor()
, dearmor()
#armor(data bytea [ , keys text[], values text[] ]) returns text dearmor(data text) returns bytea
These functions wrap/unwrap binary data into PGP ASCII-armor format, which is basically Base64 with CRC and additional formatting. PGPのASCIIアーマー形式にデータを隠す、または、データを取り出します。 ASCIIアーマーは基本的にCRC付きのBASE64という形式で、追加のフォーマットがあります。
If the <parameter>keys</parameter> and <parameter>values</parameter> arrays are specified,
an <firstterm>armor header</firstterm> is added to the armored format for each
key/value pair. Both arrays must be single-dimensional, and they must
be of the same length. The keys and values cannot contain any non-ASCII
characters.
keys
とvalues
の配列が指定された場合には、各キーと値の対に対してアーマーヘッダがアーマー形式に追加されます。
どちらの配列も1次元で、同じ長さでなければなりません。
keysとvaluesに非ASCII文字を含めることはできません。
pgp_armor_headers
#pgp_armor_headers(data text, key out text, value out text) returns setof record
<function>pgp_armor_headers()</function> extracts the armor headers from
<parameter>data</parameter>. The return value is a set of rows with two columns,
key and value. If the keys or values contain any non-ASCII characters,
they are treated as UTF-8.
pgp_armor_headers()
はdata
からアーマーヘッダを取り出します。
戻り値はキーと値の2つの列からなる行の集合です。
もしキーや値に非アスキー文字が含まれていれば、UTF-8として扱われます。
Options are named to be similar to GnuPG. An option's value should be given after an equal sign; separate options from each other with commas. For example: オプションはGnuPGに似せて命名しています。 オプションの値は等号記号の後に指定しなければなりません。 複数のオプションはカンマで区切ってください。 以下に例を示します。
pgp_sym_encrypt(data, psw, 'compress-algo=1, cipher-algo=aes256')
All of the options except <literal>convert-crlf</literal> apply only to
encrypt functions. Decrypt functions get the parameters from the PGP
data.
convert-crlf
を除くすべてのオプションは暗号化関数にのみ適用可能です。
復号関数はPGPデータからこうしたパラメータを入手します。
The most interesting options are probably
<literal>compress-algo</literal> and <literal>unicode-mode</literal>.
The rest should have reasonable defaults.
もっとも興味深いオプションはおそらくcompress-algo
とunicode-mode
でしょう。
残りはデフォルトで問題ないはずです。
Which cipher algorithm to use. 使用する暗号アルゴリズム。
Values: bf, aes128, aes192, aes256, 3des, cast5
Default: aes128
Applies to: pgp_sym_encrypt, pgp_pub_encrypt
値: bf, aes128, aes192, aes256, 3des, cast5
デフォルト: aes128
適用範囲: pgp_sym_encrypt, pgp_pub_encrypt
Which compression algorithm to use. Only available if <productname>PostgreSQL</productname> was built with zlib. 使用する圧縮アルゴリズム。 PostgreSQLがzlib付きで構築されている場合のみ利用可能です。
Values:
0 - no compression
1 - ZIP compression
2 - ZLIB compression (= ZIP plus meta-data and block CRCs)
Default: 0
Applies to: pgp_sym_encrypt, pgp_pub_encrypt
値:
0 - 非圧縮
1 - ZIP圧縮
2 - ZLIB圧縮 (ZIPにメタデータとブロックCRCを加えたもの)
デフォルト: 0
適用範囲: pgp_sym_encrypt, pgp_pub_encrypt
How much to compress. Higher levels compress smaller but are slower. 0 disables compression. どの程度圧縮するかです。 レベルが大きい程小さくなりますが、低速になります。 0は圧縮を無効にします。
Values: 0, 1-9
Default: 6
Applies to: pgp_sym_encrypt, pgp_pub_encrypt
値: 0, 1-9
デフォルト: 6
適用範囲: pgp_sym_encrypt, pgp_pub_encrypt
Whether to convert <literal>\n</literal> into <literal>\r\n</literal> when
encrypting and <literal>\r\n</literal> to <literal>\n</literal> when
decrypting. <acronym>RFC</acronym> 4880 specifies that text data should be stored using
<literal>\r\n</literal> line-feeds. Use this to get fully RFC-compliant
behavior.
暗号化の際に\n
を\r\n
に、復号の際に\r\n
を\n
に変換するかどうか。
RFC 4880では、テキストデータは改行コードとして\r\n
を使用して格納すべきであると規定されています。
完全にRFC準拠の動作を行いたければ、これを使用してください。
Values: 0, 1
Default: 0
Applies to: pgp_sym_encrypt, pgp_pub_encrypt, pgp_sym_decrypt, pgp_pub_decrypt
値: 0, 1
デフォルト: 0
適用範囲: pgp_sym_encrypt, pgp_pub_encrypt, pgp_sym_decrypt, pgp_pub_decrypt
Do not protect data with SHA-1. The only good reason to use this option is to achieve compatibility with ancient PGP products, predating the addition of SHA-1 protected packets to <acronym>RFC</acronym> 4880. Recent gnupg.org and pgp.com software supports it fine. データをSHA-1で保護しません。 このオプションを使用することが良い唯一の理由は、SHA-1で保護されたパケットがRFC 4880に追加される前の、古いPGP製品との互換性を得るためです。 最近のgnupg.orgおよびpgp.comのソフトウェアではこれを正しくサポートしています。
Values: 0, 1
Default: 0
Applies to: pgp_sym_encrypt, pgp_pub_encrypt
値: 0, 1
デフォルト: 0
適用範囲: pgp_sym_encrypt, pgp_pub_encrypt
Use separate session key. Public-key encryption always uses a separate session key; this option is for symmetric-key encryption, which by default uses the S2K key directly. 分離したセッションキーを使用します。 公開鍵暗号では常に分離したセッションキーを使用します。 このオプションは対称鍵暗号向けのもので、デフォルトではS2Kキーをそのまま使用します。
Values: 0, 1
Default: 0
Applies to: pgp_sym_encrypt
値: 0, 1
デフォルト: 0
適用範囲: pgp_sym_encrypt
Which S2K algorithm to use. 使用するS2Kアルゴリズム。
Values:
0 - Without salt. Dangerous!
1 - With salt but with fixed iteration count.
3 - Variable iteration count.
Default: 3
Applies to: pgp_sym_encrypt
値:
0 - ソルト無。危険です!
1 - ソルト有。固定繰り返し回数。
3 - 可変繰り返し回数。
デフォルト: 3
適用範囲: pgp_sym_encrypt
The number of iterations of the S2K algorithm to use. It must be a value between 1024 and 65011712, inclusive. 使用するS2Kアルゴリズムで使う繰り返しの回数。 1024以上、65011712以下の値でなければなりません。
Default: A random value between 65536 and 253952
Applies to: pgp_sym_encrypt, only with s2k-mode=3
デフォルト: 65536から253952までの乱数値
適用範囲: s2k-mode=3と指定した時のpgp_sym_encrypt
Which digest algorithm to use in S2K calculation. S2K計算で使用するダイジェストアルゴリズム。
Values: md5, sha1
Default: sha1
Applies to: pgp_sym_encrypt
値: md5, sha1
デフォルト: sha1
適用範囲: pgp_sym_encrypt
Which cipher to use for encrypting separate session key. 分離したセッションキーの暗号化に使用する暗号。
Values: bf, aes, aes128, aes192, aes256
Default: use cipher-algo
Applies to: pgp_sym_encrypt
値: bf, aes, aes128, aes192, aes256
デフォルト: cipher-algoを使用
適用範囲: pgp_sym_encrypt
Whether to convert textual data from database internal encoding to UTF-8 and back. If your database already is UTF-8, no conversion will be done, but the message will be tagged as UTF-8. Without this option it will not be. テキストデータをデータベース内部符号化方式からUTF-8に変換して戻すかどうかです。 データベースがすでにUTF-8であれば、変換は起こらず、データにUTF-8としてタグが付くのみです。 このオプションがないと、何も行われません。
Values: 0, 1
Default: 0
Applies to: pgp_sym_encrypt, pgp_pub_encrypt
値: 0, 1
デフォルト: 0
適用範囲: pgp_sym_encrypt, pgp_pub_encrypt
To generate a new key: 新しいキーを生成します。
gpg --gen-key
The preferred key type is <quote>DSA and Elgamal</quote>. 推奨するキー種類は「DSAとElgamal」です。
For RSA encryption you must create either DSA or RSA sign-only key
as master and then add an RSA encryption subkey with
<literal>gpg --edit-key</literal>.
RSA暗号化のためには、マスタとしてDSAまたはRSAで署名のみのキーを作成し、そしてgpg --edit-key
を使用してRSAで暗号化された副キーを追加しなければなりません。
To list keys: キーを列挙します。
gpg --list-secret-keys
To export a public key in ASCII-armor format: ASCIIアーマー形式で公開鍵をエクスポートします。
gpg -a --export KEYID > public.key
To export a secret key in ASCII-armor format: ASCIIアーマー形式の秘密鍵をエクスポートします。
gpg -a --export-secret-keys KEYID > secret.key
You need to use <function>dearmor()</function> on these keys before giving them to
the PGP functions. Or if you can handle binary data, you can drop
<literal>-a</literal> from the command.
PGP関数にこれらのキーを渡す前にdearmor()
を使用する必要があります。
バイナリデータを扱うことができる場合、コマンドから-a
フラグを省略することができます。
For more details see <literal>man gpg</literal>,
<ulink url="https://www.gnupg.org/gph/en/manual.html">The GNU
Privacy Handbook</ulink> and other documentation on
<ulink url="https://www.gnupg.org/"></ulink>.
詳細はman gpg
、The GNU Privacy Handbook、https://www.gnupg.org/サイトの各種文書を参照してください。
No support for signing. That also means that it is not checked whether the encryption subkey belongs to the master key. 署名に関するサポートはありません。 これはまた、暗号化副キーがマスタキーに属しているかどうか検査しないことを意味します。
No support for encryption key as master key. As such practice is generally discouraged, this should not be a problem. マスタキーとして暗号化キーをサポートしません。 一般的にこうした状況は現実的ではありませんので、問題にならないはずです。
No support for several subkeys. This may seem like a problem, as this
is common practice. On the other hand, you should not use your regular
GPG/PGP keys with <filename>pgcrypto</filename>, but create new ones,
as the usage scenario is rather different.
複数の副キーに関するサポートはありません。
よくありますので、これは問題になりそうに見えます。
一方、通常のGPG/PGPキーをpgcrypto
で使用すべきではありません。
使用する状況が多少異なりますので新しく作成してください。
These functions only run a cipher over data; they don't have any advanced features of PGP encryption. Therefore they have some major problems: これらの関数はデータ全体を暗号化するためだけに実行します。 PGP暗号化の持つ先端的な機能はありません。 したがって、大きな問題がいくつか存在します。
They use user key directly as cipher key. 暗号キーとしてユーザキーをそのまま使用します。
They don't provide any integrity checking, to see if the encrypted data was modified. 暗号化されたデータが変更されたかどうかを確認するための整合性検査をまったく提供しません。
They expect that users manage all encryption parameters themselves, even IV. ユーザが、IVをも含め暗号化パラメータ自体をすべて管理していることを想定しています。
They don't handle text. テキストは扱いません。
So, with the introduction of PGP encryption, usage of raw encryption functions is discouraged. このため、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
Encrypt/decrypt data using the cipher method specified by
<parameter>type</parameter>. The syntax of the
<parameter>type</parameter> string is:
type
で指定した暗号方法を使用してデータの暗号化・復号を行います。
type
文字列の構文は以下の通りです。
algorithm
[-
mode
] [/pad:
padding
]
where <replaceable>algorithm</replaceable> is one of:
ここでalgorithm
は以下の1つです。
bf
— Blowfish
aes
— AES (Rijndael-128, -192 or -256)
and <replaceable>mode</replaceable> is one of:
またmode
は以下の1つです。
<literal>cbc</literal> — next block depends on previous (default)
cbc
— 次のブロックは前ブロックに依存します(デフォルト)
<literal>ecb</literal> — each block is encrypted separately (for
testing only)
ecb
— 各ブロックは独自に暗号化されます(試験用途のみ)
and <replaceable>padding</replaceable> is one of:
padding
は以下の1つです。
<literal>pkcs</literal> — data may be any length (default)
pkcs
— データ長に制限はありません(デフォルト)
<literal>none</literal> — data must be multiple of cipher block size
none
— データは暗号ブロックサイズの倍数でなければなりません
So, for example, these are equivalent: このため、例えば以下は同じです。
encrypt(data, 'fooz', 'bf') encrypt(data, 'fooz', 'bf-cbc/pad:pkcs')
In <function>encrypt_iv</function> and <function>decrypt_iv</function>, the
<parameter>iv</parameter> parameter is the initial value for the CBC mode;
it is ignored for ECB.
It is clipped or padded with zeroes if not exactly block size.
It defaults to all zeroes in the functions without this parameter.
encrypt_iv
およびdecrypt_iv
では、iv
パラメータはCBCモード用の初期値となります。
ECBでは無視されます。
正確にブロック長でない場合、切り詰められるか、もしくはゼロで埋められます。
このパラメータがない場合、関数のデフォルト値はすべてゼロです。
gen_random_bytes(count integer) returns bytea
Returns <parameter>count</parameter> cryptographically strong random bytes.
At most 1024 bytes can be extracted at a time. This is to avoid
draining the randomness generator pool.
暗号論的に強いランダムなcount
バイトを返します。
一度に最大で1024バイトを抽出することができます。
ランダム性ジェネレータプールを空にすることを防止するためのものです。
gen_random_uuid() returns uuid
Returns a version 4 (random) UUID. (Obsolete, this function internally calls the <link linkend="functions-uuid">core function</link> of the same name.) バージョン4(ランダムな)UUIDを返します。 (廃れたものです。この関数は内部では同名のコア関数を呼び出します。)
<filename>pgcrypto</filename> configures itself according to the findings of the
main PostgreSQL <literal>configure</literal> script. The options that
affect it are <literal>--with-zlib</literal> and
<literal>--with-ssl=openssl</literal>.
pgcrypto
は自身で主PostgreSQLのconfigure
スクリプトの検出結果に従って構築します。
構築に影響するオプションは--with-zlib
と--with-openssl
です。
When compiled with zlib, PGP encryption functions are able to compress data before encrypting. ZLIB付きでコンパイルされた場合、PGP暗号化関数は暗号化前にデータを圧縮することができます。
<filename>pgcrypto</filename> requires <productname>OpenSSL</productname>.
Otherwise, it will not be built or installed.
pgcrypto
はOpenSSLを必要とします。
そうでなければ、構築もインストールもされません。
When compiled against <productname>OpenSSL</productname> 3.0.0 and later
versions, the legacy provider must be activated in the
<filename>openssl.cnf</filename> configuration file in order to use older
ciphers like DES or Blowfish.
OpenSSL 3.0.0とそれ以降に対してコンパイルされた場合、DESやBlowfishのような古い暗号を使うためにはopenssl.cnf
設定ファイルでレガシープロバイダを有効にしなければなりません。
As is standard in SQL, all functions return NULL, if any of the arguments are NULL. This may create security risks on careless usage. 標準SQLの通り、引数のいずれかがNULLの場合、すべての関数はNULLを返します。 注意せずに使用すると、これがセキュリティ上の問題になるかもしれません。
All <filename>pgcrypto</filename> functions run inside the database server.
That means that all
the data and passwords move between <filename>pgcrypto</filename> and client
applications in clear text. Thus you must:
pgcrypto
の関数はすべてデータベースサーバ内部で実行されます。
これは、pgcrypto
とクライアントアプリケーションとの間でやり取りされるデータはすべて平文であることを意味します。
したがって、以下を行う必要があります。
ローカルまたはSSL接続で接続
システム管理者およびデータベース管理者を信頼
If you cannot, then better do crypto inside client application. これらが不可能であれば、クライアントアプリケーション内で暗号化する方が望まれます。
The implementation does not resist
<ulink url="https://en.wikipedia.org/wiki/Side-channel_attack">side-channel
attacks</ulink>. For example, the time required for
a <filename>pgcrypto</filename> decryption function to complete varies among
ciphertexts of a given size.
実装はサイドチャネル攻撃に耐えられません。
例えば、pgcrypto
復号関数が完了するのに掛かる時間は、一定の長さの暗号文に対して一様ではありません。
Marko Kreen <markokr@gmail.com>
<filename>pgcrypto</filename> uses code from the following sources:
pgcrypto
は以下のソースを使用しています。
アルゴリズム | 作者 | 元ソース |
---|---|---|
DES crypt | David Burren他 | FreeBSD libcrypt |
MD5 crypt | Poul-Henning Kamp | FreeBSD libcrypt |
Blowfish crypt | Solar Designer | www.openwall.com |