리눅스 암호화 및 데이터 보안

암호화 및 보안

머피의 법칙

머피의 법칙 : 심리적 효과, 에드워드 머피 (에드워드 A. 머피)에 의해 제안,

원래 단어 : 선택을 안내하는 일을 할 수있는 두 가지 이상의 방법으로, 하나 개의 방법이있는 경우

재해에 의해 발생 후 반드시 누군가가 그런 선택을 할 것입니다

내용 :

간단 보인다 아무것도 적 없다

모든 것을 당신이 예상 시간보다 더 길어질 수 있습니다

뭔가 잘못은 잘못 될 것이다 잘못 될 것입니다

상황이 발생에 대해 걱정하는 경우, 다음이 발생할 가능성이 더 높습니다

 

보안

정보 보안 목표

비밀의 비밀

완전성

유용성 유용성

제어 Controlability

부인 방지 부인 방지

보안 측면

물리적 보안 : 다양한 장치 / 호스트, 실내 환경

호스트 운영 시스템 또는 장치 시스템 보안

응용 프로그램 보안 : 네트워크 서비스의 다양한 애플리케이션

네트워크 보안 : 네트워크 액세스 제어, 방화벽 규칙

데이터 보안 : 백업 및 복구 정보를 암호화 및 암호 해독

관리 보안 : 다양한 규격, 프로세스, 방법의 보호,

 

보안

보안 공격 : STRIDE

스푸핑 가짜

함부로 침해

거부 거부

정보 유출 정보 유출

서비스의 서비스 거부 거부

특권의 권한 상승 상승

 

안전 설계의 기본 원칙

정교한 보안 시스템의 사용

입력 데이터의 의심을 숙지

외부 시스템은 안전하지 않습니다

권한이 최소

외부 인터페이스를 감소

기본 보안 모드를 사용

보안은 그럴듯하지 않다

STRIDE에서 반사

입학 시험에서

시스템 관리에서 보호

 

보안 알고리즘

u는 일반적으로 보안 기술을 사용

인증

권한 부여

심사

안전 통신

암호화 알고리즘 및 프로토콜

대칭 암호화

공개 키 암호화

단방향 암호화

인증 프로토콜

대칭 암호화 알고리즘

동일한 키를 사용하여 암호화 및 암호 해독 : 대칭 암호화

DES : 데이터 암호화 표준, 56bits

3DES :

AES : 고급 (128, 192, 256bits)

복어, 투 피쉬 (Twofish)

IDEA, RC6, CAST5

특징 :

1, 암호화, 복호화에 동일한 키를 사용하여, 고효율

도 2에서, 원래의 데이터를 암호화 한 하나의 고정 된 크기의 블록으로 분할

결함 :

1, 키도

2, 키 분배

3, 데이터 소스는 확인할 수 없습니다

 

대칭 암호화를 이해하는 데 도움이 :

Bob 向Alice传输数据过程:

对称加密

Bob --data(Bob对数据加密)----data(Alice对数据解密) 

key1==key2(加密和解密的秘钥相同,为对称加密)

 

非对称加密算法

公钥加密:密钥是成对出现

公钥:公开给所有人;public key

私钥:自己留存,必须保证其私密性;secret key

特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能:

数字签名:主要在于让接收方确认发送方身份

对称密钥交换:发送方用对方的公钥加密一个对称密钥后发送给对方

数据加密:适合加密较小数据

缺点:密钥长,加密解密效率低下

算法:

RSA(加密,数字签名)

DSA(数字签名)

ELGamal

 

非对称加密

基于一对公钥/密钥对

• 用密钥对中的一个加密,另一个解密

实现加密:

• 接收者

生成公钥/密钥对:P和S

公开公钥P,保密密钥S

• 发送者

使用接收者的公钥来加密消息M

将P(M)发送给接收者

• 接收者

使用密钥S来解密:M=S(P(M))

非对称加密

u实现数字签名:

• 发送者

生成公钥/密钥对:P和S

公开公钥P,保密密钥S

使用密钥S来加密消息M

发送给接收者S(M)

• 接收者

使用发送者的公钥来解密M=P(S(M))

结合签名和加密

分离签名

RSA和DSA

RSA:公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在

(美国麻省理工学院)开发的,RSA取名来自开发他们三者的名字,后成立RSA

数据安全有限公司。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目

前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于

一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积

进行因式分解却极其困难,因此可以将乘积公开作为加密密钥

DSA (Digital Signature Algorithm):1991年7月26日提交,并归属于David

W. Kravitz前NSA员工,DSA是Schnorr和ElGamal签名算法的变种,被美国

NIST作为SS(DigitalSignature Standard), DSA是基于整数有限域离散对数难

题的,其安全性与RSA相比差不多。DSA只是一种算法,和RSA不同之处在于

它不能用作加密和解密,也不能进行密钥交换,只用于签名,它比RSA要快很多

单向散列

将任意数据缩小成固定大小的“指纹”

• 任意长度输入

• 固定长度输出

• 若修改数据,指纹也会改变(“不会产生冲突”)

• 无法从指纹中重新生成数据(“单向”)

功能:数据完整性

常见算法

md5: 128bits、sha1: 160bits、sha224 、sha256、sha384、sha512

常用工具

• md5sum | sha1sum [ --check ] file

• openssl、gpg

• rpm -V

 

示例:

md5sum  f1   对f1进行md5的加密算法,容易被破解

 sha1sum  f1 对f1进行sha1算法加密

 

非对称文件加密理解:

Bob:public(公钥),secret(私钥)key,pb,sb,Pa    Bob手里有自己的公钥、私钥及Alice公钥

Alice:Pa,Sa  Alice的公钥和私钥

第一种非对称加密过程:

Bob--data-用Alice的Pa(公钥加密)-data'-用Alice(私钥解密)-data--->Alice   

加密解密过程详解:Bob用Alice的公钥加密进行发送,Alice用自己的私钥进行解密

 

第二种非对称加密过程:(可以确定对方发送文件的来源,进行了两次加密,解码时间很长,不常用)

Pa[Sb(data)]    用Bob的私钥对数据加密,再通过Alice公钥加密传送给Alice

解密过程:

Sa{Pa[Sb(data)]}=Sb(data)  Alice用自己的私钥解密

Pb[Sb(data)]=data  再用Bob的公钥解开Bob的私钥得到数据

 

第三种非对称+hash的加密过程:

Pa{data+Sb[hash(data)]}   用Alice 的公钥加密,Bob用私钥对哈希算法的数据加密

解密过程:

1)Sa{Pa{data+Sb[hash(data)}}=data+Sb[hash(data)] 用Alice的私钥解密

2)Pb{Sb[hash(data)]}=hash(data)  然后用Bob的公钥解密

3)hash(data)===?hash(data)    用相同的hash算法对比两个数据,如果两个数据算法结果相等就确认是Bob发过来的数据。

 

第四种对称+非对称+hash

key{data+Sb[hash(data)]}+Pa(key)   用Alice公钥给key加密,然后用Bob的加密hash算法加密过的数据

1)Sa[Pa(key)]=key   用Alice的私钥解开公钥得到key

2)key{key{data+Sb[hash(data)]}}=data+Sb[hash(data)]  用Bob的公钥解开,然后用hash算法对比,如果一样就会确定是Bob发的数据,否则不是。

3)hash(data)===?hash(data)    用相同的hash算法对比两个数据,如果两个算法结果相等就确认是Bob发过来的数据。

 

应用程序:RPM

文件完整性的两种实施方式

被安装的文件

• MD5单向散列

• rpm --verify package_name (or -V)

发行的软件包文件

• GPG公钥签名

• rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat*

 

• rpm --checksig pakage_file_name (or -K)

 

密钥交换

密钥交换:IKE( Internet Key Exchange )

公钥加密:

DH (Deffie-Hellman):生成会话密钥,由惠特菲尔德·迪菲(Bailey

Whitfield Diffie)和马丁·赫尔曼(Martin Edward Hellman)在1976年发表

参看:https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange

DH:

A: g,p 协商生成公开的整数g, 大素数p

B: g,p

A:生成隐私数据 :a (a<p ),计算得出 g^a%p,发送给B

B:生成隐私数据 :b,计算得出 g^b%p,发送给A

A:计算得出 [(g^b%p)^a] %p = g^ab%p,生成为密钥

B:计算得出 [(g^a%p)^b] %p = g^ab%p,生成为密钥

 

 

实验一:生成对称秘钥文件进行传输过程

1) 在centos6上将一个文件生成对称秘钥;

命令: gpg -c f1

[root@centos6data]#gpg -c f1

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7639): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7642): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

 

 查看当前生成文件格式,是以gpg后缀的加密文件:

[root@centos6data]#ls

f1  f1.gpg

2)将文件传送到centos7的data目录下,并将其进行解密保存成文件:

scp  f1.gpg  192.168.34.100:/dafa

[root@centos6data]#scp f1.gpg 192.168.34.101:/data/

[email protected]'s password: 

f1.gpg                                                                              100%   50     0.1KB/s   00:00 

3)在centos7上进行解密

第一种解密方式:gpg -o f1 -d f1.gpg   -o是指定一个文件名为f1

第二种解密方式:gpg -d f1.gpg > f1    直接重定向到f1文件中

[root@centos7data]#gpg -o f1 -d f1.gpg

gpg: 3DES encrypted data

gpg: encrypted with 1 passphrase

gpg: WARNING: message was not integrity protected

[root@centos7data]#ls  查看已解密的文件

f1  f1.gpg

[root@centos7data]#cat f1  可以查看解密后的文件信息

aa

dd

ss

 

实验二:生成非对称秘钥并加密文件进行传输过程

1)在centos6中生成公钥和私钥文件并加密

gpg --gen-key  生成公私钥命令

[root@centos6data]#gpg --gen-key 

gpg (GnuPG) 2.0.14; Copyright (C) 2009 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Please select what kind of key you want:

   (1) RSA and RSA (default)   默认用rsa加密算法

   (2) DSA and Elgamal

   (3) DSA (sign only)

   (4) RSA (sign only)

Your selection? 

RSA keys may be between 1024 and 4096 bits long.

What keysize do you want? (2048) 1024

Requested keysize is 1024 bits

Please specify how long the key should be valid.

         0 = key does not expire  默认是永久有效

      <n>  = key expires in n days 有效期是n天

      <n>w = key expires in n weeks  有效期是n周

      <n>m = key expires in n months 有效期是n月

      <n>y = key expires in n years   有效期是n年

Key is valid for? (0) 0   0为默认永久有效

Key does not expire at all

Is this correct? (y/N) y   输入y同意上面操作

GnuPG needs to construct a user ID to identify your key.

Real name: wangge  输入一个秘钥名称

Email address:   输入一个ip地址

Comment: 

You selected this USER-ID:

    "wangge"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o  输入o对私钥进行加密

You need a Passphrase to protect your secret key.

can't connect to `/root/.gnupg/S.gpg-agent': No such file or directory

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7743): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

Xlib:  extension "RANDR" missing on display "localhost:11.0".

(pinentry-gtk-2:7748): GLib-GObject-CRITICAL **: Object class GtkSecureEntry doesn't implement property 'editing-canceled' from interface 'GtkCellEditable'

We need to generate a lot of random bytes. It is a good idea to perform

some other action (type on the keyboard, move the mouse, utilize the

disks) during the prime generation; this gives the random number 

generator a better chance to gain enough entropy.

 

cd /boot/.gnupg 切换到当前目录可以查看生成的公钥私钥对

[[email protected]]#ll

total 24

drwx------ 2 root root 4096 Oct 19 13:41 private-keys-v1.d

-rw------- 1 root root  661 Oct 19 17:36 pubring.gpg  生成的公钥

-rw------- 1 root root  661 Oct 19 17:36 pubring.gpg~

-rw------- 1 root root  600 Oct 19 17:36 random_seed

-rw------- 1 root root 1325 Oct 19 17:36 secring.gpg  生成的私钥

-rw------- 1 root root 1360 Oct 19 17:36 trustdb.gpg

 

gpg --list-keys   可以查看当前生成的公钥信息

[[email protected]]#gpg --list-keys

/root/.gnupg/pubring.gpg

------------------------

pub   1024R/B2753BA3 2019-10-19 [expires: 2019-10-29]

uid                  wangge

sub   1024R/E155F1DF 2019-10-19 [expires: 2019-10-29]

2)将centos6的公钥导出到一个文件中

  gpg -a --export -o /data/wang   -a 将公钥内容导出为文本格式文件

[[email protected]]#gpg -a --export -o /data/wang

3)将centos6导出的公钥传送给centos7的data目录下

scp wang 192.168.34.101:/data/

4)gpg --import /data/wang   将centos6和centos7的公钥导入到一起

5)gpg -e -r wangge f2    -e 加密 -r 指定公钥用户名。   用centos6的wangge用户进行加密文件

[root@centos7data]#ls

f2  f2.gpg  wang      加密后的文件以gpg后缀结尾,f2.gpg为加密后的文件

6)scp f2.gpg 192.168.34.100:/data/  将加密的f2.gpg文件传到centos6上去

[root@centos7data]#scp f2.gpg 192.168.34.100:/data/

[email protected]'s password: 

f2.gpg   

7)在centos6上对f2.gpg进行解密,所有加密文件及传输过程已完。

gpg -o f2 -d f2.gpg

8)将centos6/7生成的公钥和私钥分别进行删除:

centos6删除公钥、私钥

gpg --delete-secret-keys wangge  先删除私钥

gpg --delete-keys wangge    再删除公钥

centos7删除公钥、私钥

gpg --delete-secret-keys liuge 先删除私钥

gpg --delete-keys liuge   再删除公钥

全部加密文件传输及删除实验完毕!

 

 

 

 

 

 

 

추천

출처www.cnblogs.com/struggle-1216/p/11704718.html