Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Was ist symmetrische Verschlüsselung?

Was ist symmetrische Verschlüsselung?

零下一度
零下一度Original
2017-07-17 11:34:244639Durchsuche

Mit der Verschlüsselungsmethode des Einzelschlüssel-Kryptosystems kann derselbe Schlüssel gleichzeitig zur Verschlüsselung und Entschlüsselung von Informationen verwendet werden. Diese Verschlüsselungsmethode wird als symmetrische Verschlüsselung bezeichnet, auch bekannt als Einzelschlüssel-Verschlüsselung.

Inhaltsverzeichnis

1 Definition

2 Arbeitsablauf

3 gängige Algorithmen

4 Vor- und Nachteile

Definition

Ein Verschlüsselungsalgorithmus, der die Verwendung desselben Schlüssels für die Ver- und Entschlüsselung erfordert. Aufgrund ihrer Geschwindigkeit wird die symmetrische Verschlüsselung häufig verwendet, wenn der Absender einer Nachricht große Datenmengen verschlüsseln muss. Die symmetrische Verschlüsselung wird auch Schlüsselverschlüsselung genannt.

Die sogenannte Symmetrie bedeutet, dass beide Parteien, die diese Verschlüsselungsmethode verwenden, denselben Schlüssel zum Verschlüsseln und Entschlüsseln verwenden. Schlüssel sind Anweisungen, die den Verschlüsselungs- und Entschlüsselungsprozess steuern. Ein Algorithmus ist eine Reihe von Regeln, die vorschreiben, wie Verschlüsselung und Entschlüsselung durchgeführt werden.

Daher[1] hängt die Sicherheit der Verschlüsselung nicht nur vom Verschlüsselungsalgorithmus selbst ab, sondern die Sicherheit der Schlüsselverwaltung ist noch wichtiger. Da für die Verschlüsselung und Entschlüsselung derselbe Schlüssel verwendet wird, stellt die sichere Übertragung des Schlüssels an den Entschlüsseler ein Problem dar, das gelöst werden muss.

Arbeitsprozess

Im Folgenden finden Sie ein Beispiel, um den Arbeitsprozess der symmetrischen Verschlüsselung kurz zu erläutern. A und B sind Geschäftspartner, die in verschiedenen Städten leben. Aus geschäftlichen Gründen schicken sie sich oft gegenseitig wichtige Waren per Post zu. Um die Sicherheit der Waren zu gewährleisten, einigten sie sich darauf, einen Safe zu bauen und die Gegenstände darin aufzubewahren. Sie stellten zwei identische Schlüssel her und bewahrten sie getrennt auf, sodass sie den Safe beim Erhalt des Pakets mit dem Schlüssel öffnen und vor dem Versenden der Ware mit dem Schlüssel verschließen konnten.

Dies ist eine traditionelle Methode, um wichtige Ressourcen sicher an den Zielort zu bringen. Solange A und B den Schlüssel sorgfältig aufbewahren, können sie ihn nicht öffnen, selbst wenn jemand ihn bekommt. Diese Idee wird bei der Informationsverschlüsselung für die moderne Computerkommunikation verwendet. Bei der symmetrischen Verschlüsselung verarbeitet der Datensender den Klartext (Originaldaten) und den Verschlüsselungsschlüssel zusammen mit einem speziellen Verschlüsselungsalgorithmus, wandelt ihn in einen komplexen verschlüsselten Chiffretext um und versendet ihn. Nachdem der Empfänger den Chiffretext erhalten hat und den Originaltext entschlüsseln möchte, muss er den Verschlüsselungsschlüssel und den umgekehrten Algorithmus desselben Algorithmus verwenden, um den Chiffretext zu entschlüsseln und ihn in lesbaren Klartext wiederherzustellen. Bei einem symmetrischen Verschlüsselungsalgorithmus wird nur ein Schlüssel verwendet und sowohl der Sender als auch der Empfänger verwenden diesen Schlüssel zum Ver- und Entschlüsseln von Daten.

openssl enc -ciphername [-in Dateiname] [-out Dateiname] [-pass arg] [-e] [-d] [-a/-base64] [-k Passwort] [- S salt] [-salt] [-md] [-p/-P]

Optionsbeschreibung:

-ciphername: Geben Sie einen symmetrischen Verschlüsselungsalgorithmus (z. B. des3) an, der direkt sein kann unabhängig von enc Verwendung, wie openssl des3 oder openssl enc -des3. Es wird empfohlen, es nach enc zu verwenden, damit es nicht von der Hardware abhängt

-in-Dateiname: Eingabedatei, der Standardwert ist stdin, wenn nicht angegeben. Ausgabedatei, der Standardwert ist stdout

-e: Verschlüsselt die Eingabedatei, wenn nicht angegeben ist nur möglich, wenn diese Option explizit angegeben wird

-pass: Übergeben Sie das Klartext-Passwort zur Ver- und Entschlüsselung. Wenn der öffentliche Schlüssel oder die private Schlüsseldatei, die zur Überprüfung der Signatur verwendet wird, verschlüsselt ist, muss das Passwort zur Entschlüsselung übergeben werden. Informationen zum Passwortformat finden Sie unter „

openssl-Passwortformat

-k: wurde durch „-pass“ ersetzt und wird aus Kompatibilitätsgründen mit älteren Versionen von weiterhin beibehalten openssl-base64: Base64-Kodierung oder -Entschlüsselung nach der Verschlüsselung und vor der Entschlüsselung. Wenn nicht angegeben, ist der Standardwert binär. Beachten Sie, dass die Kodierung nicht Teil der Verschlüsselung und Entschlüsselung ist, sondern das „Organisieren“ des Datenformats vor und nach der Verschlüsselung und Entschlüsselung.

-a: entspricht -base64

-salt: Salt verwenden für Einwegverschlüsselung Kompliziert die Ergebnisse der Einwegverschlüsselung Dies ist die Standardoption und verwendet zufällige Salt-Werte

-S Salt: Verwenden Sie keine zufälligen Salt-Werte, sondern passen Sie Salt-Werte an kann nur im hexadezimalen Bereich liegen, d. h. eine oder mehrere Kombinationen von „0-9a-fA-F“

-p: Gibt den Salt-Wert, den Schlüsselwert und die IV-Initialisierung aus Vektorwert während der Ver- und Entschlüsselung (auch komplexe Verschlüsselung) Ein Weg), das Entschlüsselungsergebnis wird auch beim Entschlüsseln ausgegeben, siehe Beispiel unten

-P: hat die gleiche Wirkung wie die Option -p, beendet jedoch die Tool direkt beim Drucken, ohne Verschlüsselungs- oder Entschlüsselungsvorgänge durchzuführen

-md: Geben Sie den Einwegverschlüsselungsalgorithmus an, Standard md5. Dieser Algorithmus wird zum Verschlüsseln des Schlüsselteils verwendet, siehe Analyse unten.

Die unterstützten Einwegverschlüsselungsalgorithmen sind:

Die unterstützten symmetrischen Verschlüsselungsalgorithmen sind:

-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

在给出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

由此,能推理出对称加密时使用的对称密钥和对称算法是毫无关系的。

Das obige ist der detaillierte Inhalt vonWas ist symmetrische Verschlüsselung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn