対称暗号化と非対称暗号化とは何ですか? ハッシュ暗号化ですか?

「ナゲッツ・スターティングプラン」に参加しています

暗号化

暗号となると、誰もが慣れ親しんでいるに違いありません。人生やさまざまな映画やテレビドラマ、特にスパイ戦争ドラマでは、誰もが「暗号」にさらされることになります。

例えば、麻雀をして悪友との約束をするとき、耳を触れば「チューブ」が欲しくなり、鼻を触れば「チップ」が欲しくなります。

画像.pngたとえば、映画「風」のプロットでは、周迅は自分の服に暗号文を縫い付けて死にました。

画像.pngこのスレッドは、映画やテレビのドラマでよく耳にする「モールス信号」です. 厳密に言えば、「モールス信号」はパスワードではなく、誰もが持っている「コードブック」ですが、この形式 (暗号文に置き換えられます) 元のtext) は比較的一般的な暗号化形式です。前述の暗号化は文字情報を暗号化するのが一般的ですが、コンピュータの暗号化には文字だけでなく、画像や動画も含まれます。对称加密それでは、以下の最新の暗号化の 2 つの暗号化タイプについて説明しましょう。非对称加密

対称暗号化

対称暗号は、前述の「モールス符号」と同様に、暗号化アルゴリズムと鍵を使用してデータを変換して暗号文データを取得し、鍵と復号化アルゴリズムに従って暗号文を復元して元のデータを取得します。

たとえば、単純な暗号化アルゴリズムを設計します。数字のみ、各桁から対応するキーを差し引いたものであり、対応する復号化はビットごとにキーを追加することです。

  • 生データ: 4398
  • キー: 5
  • 暗号化結果: -1-243

これは厳密な意味での暗号化アルゴリズムではありません。これは暗号化プロセスの単なるデモです。

暗号化と復号化のプロセスは次のとおりです。

対称暗号化.drawio.png

従来の対称暗号化アルゴリズムには、主に DES、3DES、AES などがあります。

非対称暗号化

対称暗号は 1 つの鍵しか持たないのに対し、非対称暗号は通常 2 つの鍵を持ち、暗号化と復号化のプロセスでは、一方を暗号化し、もう一方を「復号化」します。2 つのキーのうちの 1 つは公開され、誰にでも知られ、それを と呼び公钥、もう 1 つは公開できず、それを と呼びます私钥公钥暗号化は通常私钥、「復号化」が使用されます。ここで「復号化」が引用されている理由は、非対称暗号化では復号化されないためです。秘密鍵でデータを復元するプロセスも暗号化ですが、暗号文の暗号化アルゴリズムは元の暗号化を取得します。データ。

たとえば、数値のみの非対称暗号化アルゴリズムを設計します。アルゴリズムは各数字を追加することです。2 つのキーは28

  • 生データ:230
  • 公開鍵: 2
  • 暗号化結果: 452
  • 解密:使用私钥8再做一次加法,保留最低位,如:4+8 = 12,保留最低位 2,最后会的到原始数据 230

这也是一个不严谨的算法,真实的非对称加密需要很复杂的数学算法,此处也仅仅是辅助讲解的示例

非对称加密工作过程如下图:

非対称暗号化-Signature.drawio.png

经典非对称加密算法主要有 RSA、DSA 等

数字签名

非对称加密的公钥是公开的,任何人都能看到,私钥是非公开的,加解密过程是公钥加密,私钥解密。那么反过来私钥加密能用公钥解密么,答案是可以。非对称加密的公私钥一般都是可以相互加解密。虽然可以相互加解密,但是它们公私钥的身份是不能互换的,因为一般非对称加密的私钥是可以推断出公钥(涉及到算法原理,本文不做讲解)。就是说私钥就是私钥,不能被公开,当做公钥。

如果「Tony」给我发了一条消息message,中间经过很多快递小哥转手,我其实是无法判断message有没有被篡改的。所以「Tony」想了个法子,申请了非对称加密的公钥public私钥private,并告知我他的公钥是什么。于是他重新发消息给我,内容是[private-message] + message + public,我在收到消息后用public[private-message]进行还原,得到结果[message-restore]message匹配,如果完全相同,则一定能确定消息是来自「Tony」,对吧。因为私钥加密只能用公钥解密,而我知道公钥属于「Tony」,那只要能还原结果,那消息就没有被篡改。这就是非对称加密的另一个应用场景数字签名。「Tony」用私钥对消息加密,相当于是给消息做了签名

我们生活中会有各种需要签名的场景,比如写「欠条」、「** 声明」都需要落款,手写名字、盖章或按手印。目的是让对方知道这谁写的,而不是伪造的,这是签名的作用。而数字签名也是起到同样的作用。

数字签名是非对称加密应用非常广泛的功能,其签名过程如下图:

非対称暗号化-Signature.drawio.png

  • 用私钥对原始数据加密,生成签名数据
  • 用公钥对签名数据解密,生成结果与原始数据匹配,
  • 匹配一致则能保证原始数据未被篡改

不过数字签名一般不会对原始数据签名,因为原始数据体积有可能会比较大,不方便传输,所以一般会针对原始数据的摘要做签名。那什么是摘要,如何得到摘要数据,我们就需要了解下摘要算法Hash算法

摘要/Hash算法

摘要算法又称哈希算法散列算法。它通过一个算法,把任意长度的数据转换为一个长度固定的数据串。这是 Hash 算法的定义,很多人只看这一句可能看不太懂,“转成一个长度固定的字符串”,这样做的目的是啥,有什么用?没关系,我们先从懂的开始看,来看看“摘要”。

大家对摘要应该不会陌生,我们在写毕业论文时都会有一页摘要,其内容就是描述研究工作的主要对象和范围,采用的手段和方法,得出的结果和重要的结论,有时也包括具有情报价值的其它重要的信息。一句话总结就是,描述了论文的主要内容,读者阅读摘要就可以知道文章的基本信息,因为摘要内包含了文章的主要特征。

所以摘要算法跟论文摘要一样,它提取了目标数据的特征,用一个固定长度的字符串表示,其有以下特点:

  • 可以表示任意长度数据特征。比如 1MB、1GB 的数据,他们的摘要值都是 128 位。
  • 一般地,只要输入的消息不同,对数据进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。
  • 只能进行正向的信息摘要,而无法从摘要中恢复出任何原始消息。

经典的摘要算法主要有:MD5SHA1SHA256

诶,MD5?我们貌似经常能听到 MD5 加密?先说结论:MD5 不是加密。鲁迅先生也曾经说过“我哪怕死了,被钉在棺材里,也要用腐朽的声音喊出「MD5不是加密不是加密不是加密」”。

为什么要强调 MD5 不是加密?因为加密跟摘要算法是没有任何关系,如果不将两者区分开,势必会混淆摘要算法与加密的理解。什么是加密?加密是使用加密算法对数据进行转换得到密文数据,并且可以通过解密算法对密文进行还原。而摘要算法的特点是只能进行正向的信息摘要,而无法从摘要中恢复出任何原始消息。从它们的工作机制我们也能看出两者并无联系。

在了解什么是摘要算法后,我们再聊聊,它有什么用?

摘要算法应用场景
隐私保护(保存用户口令)

由于摘要算法具有不可逆的特点,所以将用户口令以摘要形式存储是更合理的方式。这样可以防止任何人(包括公司的研发、运维人员)知晓用户的口令信息,也能保证即使服务器遭到攻击,数据泄露后,用户的口令会被泄露。而如果用户口令被明文存储,就会将用户置于较大风险之中。

这里有一个比较出名的反面教材,就是数年前的 CSDN ,当时其用户口令信息都是以明文形式存储,不巧的是他们的数据库泄露,导致大量的用户口令信息暴露。感兴趣的可以搜一下 CSDN 数据库泄露事件。

数字指纹

画像.png 有些网站提供了可下载文件的 MD5 或 SHA 的 hash 值,这个值就是这个文件的摘要或指纹信息。我们在文件下载完成后可以比对已下载文件的 hash 值,如果一样,说明下载的文件是完整的、没有被篡改的。反之,则文件有可能不完整,或不一样,总之肯定跟原网站的文件不完全相同。换句话说,这个 hash 是一个指纹信息,可以用这个信息代表生成这个指纹的数据。

完整数字签名流程

ダイジェスト アルゴリズムを理解したら、前のデジタル署名プロセスを見ていきましょう。これまでの署名処理では、受信者はデータ「原本データプラス」と秘密鍵で暗号化された原本データを取得する必要があり、「原本データプラス」の量が原本データと同程度であることがわかっている場合があります。伝送効率は確実に低下します。したがって、通常、デジタル署名は元のデータに署名するのではなく、元のデータのハッシュ署名に署名します。完全なプロセスは次のとおりです。

非対称暗号化署名-final.drawio.png

  • 生データの「要約情報」を計算する
  • 秘密鍵を使用して「概要情報」を暗号化します-つまり、署名します
  • 元のデータと「署名付きダイジェスト」をターゲット ユーザーにパッケージ化する
  • ユーザーは、まず元データの「要約情報」を計算し、「署名付きダイジェスト」を公開鍵で復号化して「検証対象要約」を取得し、最後に「要約情報」と比較します。

これは、デジタル署名と検証の完全なプロセスです

要約する

対称暗号化の概念は比較的単純であり、関連するアプリケーションは私たちの生活のいたるところで見られます。

非対称暗号は比較的複雑で、おなじみの RSA は 3 人の数学者 (Ron Rivest、Adi Shamir、Leonard Adleman) によって提案されました。その複雑さのために、非対称暗号化の計算効率は対称暗号化の計算効率よりもはるかに低くなります。

ダイジェスト アルゴリズムは暗号化ではなく、互いに何の関係もありません。

おすすめ

転載: juejin.im/post/7230001506111815736