ホームページ >運用・保守 >Linuxの運用と保守 >対称暗号化とは何ですか?
単一キー暗号化方式の暗号化方式を使用すると、同じキーを使用して情報の暗号化と復号化を同時に行うことができます。この暗号化方式は対称暗号化と呼ばれ、単一キー暗号化とも呼ばれます。
目次
1 定義
2 作業プロセス
3 一般的なアルゴリズム
4 利点と欠点
定義
暗号化と復号化に同じキーの使用を必要とする暗号化アルゴリズム。対称暗号化はその速度のため、メッセージの送信者が大量のデータを暗号化する必要がある場合によく使用されます。対称暗号化はキー暗号化とも呼ばれます。
いわゆる対称性とは、この暗号化方式を使用する双方が同じキーを使用して暗号化と復号化を行うことを意味します。キーは、暗号化と復号化のプロセスを制御する命令です。アルゴリズムは、暗号化と復号化の実行方法を決定する一連のルールです。
したがって[1] 暗号化の安全性は暗号化アルゴリズム自体に依存するだけでなく、鍵管理の安全性がさらに重要です。暗号化と復号には同じ鍵が使用されるため、復号者に鍵を安全に渡すにはどうすればよいかが解決すべき問題となります。
作業プロセス
以下は、対称暗号化の作業プロセスを簡単に説明するための例です。 A と B は異なる都市に住んでいるビジネス パートナーです。ビジネス上の必要性から、彼らは頻繁に重要な品物をお互いに郵送します。商品の安全を確保するために、彼らは金庫を作り、そこに商品を入れることに同意した。彼らは 2 つの同一の鍵を作成し、別々に保管しておきました。これにより、荷物を受け取るときにその鍵を使用して金庫を開け、商品を郵送する前にその鍵を使用して金庫をロックできるようになりました。
上記は、重要な資源を目的地まで安全に届けるための伝統的な方法です。A と B が鍵を大切に保管している限り、たとえ誰かが金庫を手に入れても、開けることはできません。この考え方は、現代のコンピューター通信の情報暗号化に使用されています。対称暗号化では、データ送信者が平文(元データ)と暗号鍵を特殊な暗号化アルゴリズムで処理し、複雑な暗号文に変換して送信します。受信者が暗号文を受信した後、元のテキストを解読したい場合は、暗号文を読み取り可能な平文に復元するために、暗号化キーと同じアルゴリズムの逆アルゴリズムを使用して暗号文を復号する必要があります。対称暗号化アルゴリズムでは、1 つのキーのみが使用され、送信者と受信者の両方がこのキーを使用してデータの暗号化と復号化を行います。
openssl enc -ciphername [-in ファイル名] [-out ファイル名] [-pass arg] [-e] [-d] [-a/-base64] [-k パスワード] [-S Salt] [-salt ] [-md] [-p/-P]
オプションの説明:
-ciphername: openssl des3 や openssl enc などの enc から直接独立して使用できる対称暗号化アルゴリズム (des3 など) を指定します。デス3。ハードウェアに依存しないため、enc の後に使用することをお勧めします
-in filename: 入力ファイル、指定されていない場合のデフォルトは stdin です
-out filename: 出力ファイル、指定されていない場合のデフォルトは stdout です
-e: 入力ファイルを暗号化する操作。指定されていない場合、デフォルトはこのオプションです。
-d: このオプションが指定されている場合のみ、復号化が可能です。暗号化と復号化。署名の検証時に使用される公開キーまたは秘密キー ファイルが暗号化されている場合、復号化するにはパスワードを渡す必要があります。パスワード形式については、「
openssl パスワード形式」を参照してください-k : 「-pass」に置き換えられ、古いバージョンの openssl との互換性のためにまだ保持されています
-base64: 暗号化後および暗号化前の Base64 エンコードdecryption または decrypt。指定しない場合、デフォルトはバイナリです。エンコードは暗号化と復号化の一部ではなく、暗号化と復号化の前後のデータ形式の「編成」であることに注意してください
-a: -base64 と同等
-salt: ソルトを使用して一方向の結果を複雑にします一方向暗号化中の暗号化 これはデフォルトのオプションであり、ランダムなソルト値を使用します。
-S ソルト: ランダムなソルト値を使用せず、ソルト値をカスタマイズします。ただし、16 進数の文字の組み合わせのみにすることができます。範囲、つまり、「0-9a-fA- F の 1 つ以上の組み合わせ」
-p: 暗号化および復号化中にソルト値、キー値、IV 初期化ベクトル値を出力します (暗号化を複雑にする方法でもあります)。復号化中に復号化結果も出力します。以下の例を参照してください
-P: -p オプションと同じ効果ですが、印刷時に暗号化または復号化操作を実行せずにツールを直接終了します
-md: 一方向暗号化を指定しますアルゴリズム、デフォルトは md5 です。このアルゴリズムはキー部分の暗号化に使用されます。以下の分析を参照してください。
サポートされる一方向暗号化アルゴリズムは次のとおりです:-md4 to use the md4 message digest algorithm-md5 to use the md5 message digest algorithm-ripemd160 to use the ripemd160 message digest algorithm-sha to use the sha message digest algorithm-sha1 to use the sha1 message digest algorithm-sha224 to use the sha224 message digest algorithm-sha256 to use the sha256 message digest algorithm-sha384 to use the sha384 message digest algorithm-sha512 to use the sha512 message digest algorithm-whirlpool to use the whirlpool message digest algorithm
-aes-128-cbc -aes-128-cbc-hmac-sha1 -aes-128-cfb -aes-128-cfb1 -aes-128-cfb8 -aes-128-ctr -aes-128-ecb -aes-128-gcm -aes-128-ofb -aes-128-xts -aes-192-cbc -aes-192-cfb -aes-192-cfb1 -aes-192-cfb8 -aes-192-ctr -aes-192-ecb -aes-192-gcm -aes-192-ofb -aes-256-cbc -aes-256-cbc-hmac-sha1 -aes-256-cfb -aes-256-cfb1 -aes-256-cfb8 -aes-256-ctr -aes-256-ecb -aes-256-gcm -aes-256-ofb -aes-256-xts -aes128 -aes192 -aes256 -bf -bf-cbc -bf-cfb -bf-ecb -bf-ofb -blowfish -camellia-128-cbc -camellia-128-cfb -camellia-128-cfb1 -camellia-128-cfb8 -camellia-128-ecb -camellia-128-ofb -camellia-192-cbc -camellia-192-cfb -camellia-192-cfb1 -camellia-192-cfb8 -camellia-192-ecb -camellia-192-ofb -camellia-256-cbc -camellia-256-cfb -camellia-256-cfb1 -camellia-256-cfb8 -camellia-256-ecb -camellia-256-ofb -camellia128 -camellia192 -camellia256 -cast -cast-cbc -cast5-cbc -cast5-cfb -cast5-ecb -cast5-ofb -des -des-cbc -des-cfb -des-cfb1 -des-cfb8 -des-ecb -des-ede -des-ede-cbc -des-ede-cfb -des-ede-ofb -des-ede3 -des-ede3-cbc -des-ede3-cfb -des-ede3-cfb1 -des-ede3-cfb8 -des-ede3-ofb -des-ofb -des3 -desx -desx-cbc -id-aes128-GCM -id-aes128-wrap -id-aes128-wrap-pad -id-aes192-GCM -id-aes192-wrap -id-aes192-wrap-pad -id-aes256-GCM -id-aes256-wrap -id-aes256-wrap-pad -id-smime-alg-CMS3DESwrap -idea -idea-cbc -idea-cfb -idea-ecb -idea-ofb -rc2 -rc2-40-cbc -rc2-64-cbc -rc2-cbc -rc2-cfb -rc2-ecb -rc2-ofb -rc4 -rc4-40 -rc4-hmac-md5 -seed -seed-cbc -seed-cfb -seed-ecb -seed-ofb
在给出openssl enc命令用法示例之前,先解释下对称加密和解密的原理和过程。
对称加解密时,它们使用的密码是完全相同的,例如"123456",但这是密码,且是明文密码,非常不安全,所以应该对此简单密码进行复杂化。最直接的方法是使用单向加密计算出明文密码的hash值,单向加密后新生成的密码已经比较安全(称之为密钥比较好),可以作为对称加密时的对称密钥。另外,由于同一单向加密算法对相同明文密码的计算结果是完全一致的,这样解密时使用相同的单向加密算法就能计算出完全相同的密钥,也就是解密时的对称密钥。如果想要更安全,还可以在对称加密后对加密文件进行重新编码,如使用"base64"、二进制或hex编码方式进行编码,但对应的在解密前就需要先解码,解码后才能解密。
所以,将对称加、解密的机制简单概括如下:
对称加密机制:根据指定的单向加密算法,对输入的明文密码进行单向加密(默认是md5),得到固定长度的加密密钥,即对称密钥,再根据指定的对称加密算法,使用对称密钥加密文件,最后重新编码加密后的文件。即单向加密明文密码结果作为对称密钥、使用对称密钥加密文件、对文件重新编码。
对称解密机制:先解码文件,再根据单向加密算法对解密时输入的明文密码计算得到对称密钥,依此对称密钥对称解密解码后的文件。
因此,解密过程中使用的解码方式、单向加密和对称加密算法都必须一致,且输入的密码必须是正确密码。但需要注意的一点是,解密时可以不指定salt,因为加密时使用的salt会记录下来,解密时可以读取该salt。
如下图所示,分别是加密和解密过程示意图。
示例:
以加密/etc/fstab的备份文件/tmp/test.txt为例。
(1).首先测试openssl enc的编码功能。由于未指定密码选项"-k"或"-pass",所以仅仅只进行编码而不进行加密,因此也不会提示输入密码。
[root@xuexi tmp]# openssl enc -a -in test.txt -out test_base64.txt [root@xuexi tmp]# cat test_base64.txt CiMKIyAvZXRjL2ZzdGFiCiMgQ3JlYXRlZCBieSBhbmFjb25kYSBvbiBUaHUgTWF5 IDExIDA0OjE3OjQ0IDIwMTcKIwojIEFjY2Vzc2libGUgZmlsZXN5c3RlbXMsIGJ5 IHJlZmVyZW5jZSwgYXJlIG1haW50YWluZWQgdW5kZXIgJy9kZXYvZGlzaycKIyBT ZWUgbWFuIHBhZ2VzIGZzdGFiKDUpLCBmaW5kZnMoOCksIG1vdW50KDgpIGFuZC9v ciBibGtpZCg4KSBmb3IgbW9yZSBpbmZvCiMKVVVJRD1iMmE3MGZhZi1hZWE0LTRk OGUtOGJlOC1jNzEwOWFjOWM4YjggLyAgICAgICAgICAgICAgICAgICAgICAgeGZz ICAgICBkZWZhdWx0cyAgICAgICAgMCAwClVVSUQ9MzY3ZDZhNzctMDMzYi00MDM3 LWJiY2ItNDE2NzA1ZWFkMDk1IC9ib290ICAgICAgICAgICAgICAgICAgIHhmcyAg ICAgZGVmYXVsdHMgICAgICAgIDAgMApVVUlEPWQ1MDUxMTNjLWRhYTYtNGMxNy04 YjAzLWIzNTUxY2VkMjMwNSBzd2FwICAgICAgICAgICAgICAgICAgICBzd2FwICAg IGRlZmF1bHRzICAgICAgICAwIDAK
再以base64格式进行解码。
[root@xuexi tmp]# openssl enc -a -d -in test_base64.txt # # /etc/fstab # Created by anaconda on Thu May 11 04:17:44 2017# # Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info# UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 / xfs defaults 0 0UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot xfs defaults 0 0UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap swap defaults 0 0
实际上,上述编码和解码的过程严格地说也是对称加密和解密,因为openssl enc默认会带上加密选项"-e",只不过因为没有指定输入密码选项,使用的加密密码为空而已,且单向加密算法使用的也是默认值。解密时也一样。
(2).测试使用des3对称加密算法加密test.txt文件。
[root@xuexi tmp]# openssl enc -a -des3 -in test.txt -out test.1 -pass pass:123456 -md md5
加密后,查看加密后文件test.1的结果。
[root@xuexi tmp]# cat test.1U2FsdGVkX1+c/d4NsXnY6Pd7rcZjGSsMRJWQOP0s5sxH6aLE5iCYjKEAbGac//iRwkUUh6a57OpUA3+OOCKB4z+IxBcKo67BUDGR9vYeCfkobH9F+mSfVzZbXBrJmxwf 921tJ+8K+yKB6DjJfufpW+DWXmH8MFyvK60wnYHsfUQOp81EvaUtEfqEKIS8hgg7 4NTOyww+/VMDdc2wmkf08XNQUPlVtLaSx3vuBisxRdu8raiKWGGOB7qCwELCxDqu NaRCIh0VjjffGohAOMMsAQ2kFCDUKx0Z4Df5fvifhPXoHfsj2lI216BPG5Cy88K2 KV78DoBm4pnMAymo/HRRF95LjvWYZIN88hIVN67u2j9zqSGeuyJakMyDVhYYmrHl sMr2YTbTwus2DiO6qAzt/0a9nocTVKfGR81Xsh0a0ZudjtrMl5H36YJawpldvUCa DzXPsbpQrp0VGi2HvJ4EVKKEx2uh8XYWmJ4ytj1s1wtCR6wQhmERtInGwULWTyI+agXStSB5XzsvAJRJvexsaNycj5lAoQ8O6YXEj7B0inB7nBQTFbwkXyvJqXpr1179 i67leYc59OvlhRMA+GLW4g/Mg5dN5SBmgt1ChOJs4887zAUyLYrLvR4zDK6IQN/M P6F15c9V+m9pw2t32sUQQmYrYqOV/AQf0t0EwvA0Myjmfqtvmp555Q==
解密文件test.1。
[root@xuexi tmp]# openssl enc -a -des3 -d -in test.1 -out test.2 -pass pass:123456 -md md5 [root@xuexi tmp]# cat test.2 # # /etc/fstab # Created by anaconda on Thu May 11 04:17:44 2017# # Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info# UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 / xfs defaults 0 0UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot xfs defaults 0 0UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap swap defaults 0 0
(3).加密时带上点盐salt。其实不写时默认就已经加入了,只不过是加入随机盐值。使用-S可以指定明确要使用的盐的值。但是盐的值只能是16进制范围内字符的组合,即"0-9a-fA-F"的任意一个或多个组合。
[root@xuexi tmp]# openssl enc -a -des3 -S 'Fabc' -in test.txt -out test.1 -pass pass:123456 -md md5
解密。解密时不用指定salt值,即使指定了也不会影响解密结果。
[root@xuexi tmp]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5 # # /etc/fstab # Created by anaconda on Thu May 11 04:17:44 2017# # Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info# UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 / xfs defaults 0 0UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot xfs defaults 0 0UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap swap defaults 0 0
[root@xuexi tmp]# openssl enc -a -des3 -d -S 'Fabcxdasd' -in test.1 -pass pass:123456 -md md5 # # /etc/fstab # Created by anaconda on Thu May 11 04:17:44 2017# # Accessible filesystems, by reference, are maintained under '/dev/disk'# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info# UUID=b2a70faf-aea4-4d8e-8be8-c7109ac9c8b8 / xfs defaults 0 0UUID=367d6a77-033b-4037-bbcb-416705ead095 /boot xfs defaults 0 0UUID=d505113c-daa6-4c17-8b03-b3551ced2305 swap swap defaults 0 0
(4).在测试下"-p"和"-P"选项的输出功能。小写字母p不仅输出密钥算法结果,还输出加解密的内容,而大写字母P则只输出密钥算法结果。
加密时的情况。
[root@xuexi tmp]# openssl enc -a -des3 -S 'Fabc' -in test.txt -out test.1 -pass pass:123456 -md md5 -psalt=FABC000000000000 key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D iv =5128FDED01EE1499
其中key就是单向加密明文密码后得到的对称密钥,iv是密码运算时使用的向量值。
再看解密时的情况,此处加上了salt。
[root@xuexi tmp]# openssl enc -a -des3 -d -S 'Fabc' -in test.1 -pass pass:123456 -md md5 -Psalt=FABC000000000000 key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D iv =5128FDED01EE1499
若解密时不指定salt,或者随意指定salt,结果如下。
[root@xuexi tmp]# openssl enc -a -des3 -d -in test.1 -pass pass:123456 -md md5 -P salt=FABC000000000000 key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D iv =5128FDED01EE1499
[root@xuexi tmp]# openssl enc -a -des3 -S 'FabM' -d -in test.1 -pass pass:123456 -md md5 -Psalt=FABC000000000000 key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D iv =5128FDED01EE1499
可见,解密时,只要指定和加密时相同编码格式和单向加密算法,密钥的结果就是一样的,且解密时明确指定salt是无意义的,因为它可以读取到加密时使用的salt。
甚至,解密时指定不同的对称加密算法,密钥结果也是一样的。
[root@xuexi tmp]# openssl enc -a -desx -d -in test.1 -pass pass:123456 -md md5 -p salt=FABC000000000000 key=885FC58E6C822AEFC8032B4B98FA0355F8482BD654739F3D iv =5128FDED01EE1499
由此,能推理出对称加密时使用的对称密钥和对称算法是毫无关系的。
以上が対称暗号化とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。