> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > 대칭 암호화란 무엇입니까?

대칭 암호화란 무엇입니까?

零下一度
풀어 주다: 2017-07-17 11:34:24
원래의
4628명이 탐색했습니다.

단일 키 암호화 시스템의 암호화 방식을 사용하면 동일한 키를 동시에 정보 암호화 및 복호화에 사용할 수 있습니다. 이 암호화 방식을 대칭 암호화라고 하며, 단일 키 암호화라고도 합니다.

목차

1 정의

2 작업 프로세스

3 공통 알고리즘

4 장점과 단점

정의

암호화와 복호화에 동일한 키를 사용해야 하는 암호화 알고리즘입니다. 속도 때문에 대칭 암호화는 메시지 발신자가 대량의 데이터를 암호화해야 할 때 자주 사용됩니다. 대칭 암호화는 키 암호화라고도 합니다.

소위 대칭이란 이 암호화 방법을 사용하는 양측이 동일한 키를 사용하여 암호화하고 해독한다는 것을 의미합니다. 키는 암호화 및 암호 해독 프로세스를 제어하는 ​​지침입니다. 알고리즘은 암호화 및 암호 해독이 수행되는 방법을 지정하는 일련의 규칙입니다.

그러므로[1] 암호화의 보안은 암호화 알고리즘 자체에 달려 있을 뿐만 아니라 키 관리의 보안이 더욱 중요합니다. 암호화와 복호화에 동일한 키가 사용되기 때문에 어떻게 키를 복호화기에 안전하게 전달할 것인가가 해결되어야 할 문제가 된다.

작업과정

다음은 대칭암호의 작업과정을 간략하게 설명하기 위한 예시이다. A와 B는 서로 다른 도시에 사는 비즈니스 파트너입니다. 업무상의 필요로 인해 중요한 물품을 서로에게 우편으로 보내는 경우가 많습니다. 물품의 안전을 보장하기 위해 금고를 만들어 그 안에 물품을 넣기로 합의했습니다. 동일한 열쇠 2개를 만들어 따로 보관해 택배를 받을 때 열쇠로 금고를 열고, 물품을 우편으로 보내기 전에는 열쇠로 금고를 잠글 수 있도록 했다.

위 내용은 A와 B가 열쇠를 잘 보관하면 누군가가 금고를 가져가도 열 수 없도록 중요한 자원을 목적지까지 안전하게 전달하는 전통적인 방법입니다. 이 아이디어는 현대 컴퓨터 통신을 위한 정보 암호화에 사용됩니다. 대칭 암호화에서는 데이터 송신자가 일반 텍스트(원본 데이터)와 암호화 키를 특수 암호화 알고리즘으로 처리하여 복잡한 암호화 암호문으로 변환하여 전송합니다. 수신자가 암호문을 수신한 후 원본 텍스트를 해독하려면 암호화 키와 동일한 알고리즘의 역알고리즘을 사용하여 암호문을 해독하여 읽을 수 있는 일반 텍스트로 복원해야 합니다. 대칭 암호화 알고리즘에서는 하나의 키만 사용되며 송신자와 수신자 모두 이 키를 사용하여 데이터를 암호화하고 복호화합니다.

openssl enc -ciphername [-in 파일 이름] [-out 파일 이름] [-pass 인수] [-e] [-d] [-a/-base64] [-k 비밀번호] [-S salt] [-salt ] [-md] [-p/-P]

옵션 설명:

-ciphername: openssl des3 또는 openssl enc와 같이 enc와 독립적으로 직접 사용할 수 있는 대칭 암호화 알고리즘(예: des3)을 지정합니다. des3. enc 이후에 사용하는 것을 권장하므로 하드웨어에 구애받지 않습니다

-in 파일명: 입력 파일, 지정하지 않을 경우 기본값은 stdin

-out 파일명: 출력 파일, 지정하지 않을 경우 기본값은 stdout

-e: 입력 파일 암호화 작업, 지정되지 않은 경우 기본값은 이 옵션입니다.

-d: 이 옵션이 지정된 경우에만 암호 해독이 가능합니다. 암호화 및 암호 해독. 서명 검증에 사용된 공개키나 개인키 파일이 암호화된 경우, 복호화를 위해 비밀번호를 전달해야 합니다. 비밀번호 형식은 "

openssl 비밀번호 형식"-k를 참조하세요. : "-pass"로 대체되었으며 이전 버전의 openssl

-base64와의 호환성을 위해 계속 유지됩니다. 암호화 후 및 이전의 Base64 인코딩 decryption 또는 암호 해독, 지정하지 않은 경우 기본값은 바이너리입니다. 인코딩은 암호화 및 암호 해독의 일부가 아니라 암호화 및 암호 해독 전후의 데이터 형식을 "구성"한다는 점에 유의하세요.

-a: -base64

-salt와 동일: 솔트를 사용하여 단방향 결과를 복잡하게 만듭니다. 단방향 암호화 중 암호화는 기본 옵션이며 임의의 솔트 값을 사용합니다.

-S 솔트: 임의의 솔트 값을 사용하지 않고 사용자 정의 솔트 값을 사용하지만 16진수 문자 조합만 사용할 수 있습니다. 범위, 즉 "0-9a-fA- 하나 이상의 F 조합"

-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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿