概念の説明:対称暗号化、非対称暗号化、公開鍵、秘密鍵、署名、証明書

くさび

現在、ネットワークのセキュリティはますます重要になっており、開発プロセス中に、プログラマーは公開鍵、秘密鍵、暗号化、署名などの関連用語に遭遇します。これらの概念は乱雑で混乱しやすいので、この部分の内容を整理してみましょう。

対称暗号化

重要な情報の伝達において、人々は常に情報が盗まれたり、改ざんされたり、偽造されたりしないことを望んでいます。人々はこの要件を満たすために一生懸命働いています。

電報の暗号化に使用されるコードブックは、第1世代のネットワークセキュリティで使用される暗号化方法です。使用法は、メッセージを送信するときにコンテンツを暗号文に変換します。電報を受信する側は、同じコードブックを使用して正しい情報を復号化できます。たくさんの文字化けしたキャラクターを見ました。

この従来の暗号化方法は、対称暗号化と呼ばれます。

対称暗号化に使用されるアルゴリズムには、DES、3DES、AES、DESX、Blowfish、RC4、RC5、RC6が含まれます。これらのアルゴリズムは、キーと見なすことも、上記のコードブックとして理解することもできます。これらのアルゴリズムは、「対称暗号化アルゴリズム」または「従来の暗号化アルゴリズム」とも呼ばれ、一方の当事者はアルゴリズムを使用して暗号化し、もう一方の当事者は同じアルゴリズムを使用して復号化します。

例として、シャーロックホームズ探偵のダンシングヴィランの場合に登場したヴィランを取り上げましょう。

各悪役は英語の文字を表し、悪役の手のフラグは単語を分離するために、つまり単語の境界を表すために使用されます。情報を転送するときは、情報を悪役に置き換え、相手がその悪役を見つけたら、メッセージに表示されている悪役を解析します。ちなみに劇中のヒロインはギャングリーダーの娘であり、囚人たちはこれらの悪役を使ってヒロインにメッセージを送り、帰ろうと脅した。

これらの悪役と英語の文字の間の対応は、対称暗号化と同等のキーと同等です。送信者と受信者の両方が同じキーを使用するため、つまり、悪者の意味は同じです。

ただし、対称アルゴリズムのセキュリティはキーに大きく依存しており、キーの漏洩は誰でも送受信するメッセージを解読できることを意味するため、キーの機密性は通信のセキュリティにとって重要です。したがって、これらの悪役の意味を分析した後、ホームズはこれらの悪役を使用して、囚人を誘惑するメッセージを送信しました。したがって、この種の対称暗号化では、キーのセキュリティが非常に重要です。

では、対称暗号化の長所と短所は何ですか?

利点:少量の計算、高速な暗号化速度、高い暗号化効率

短所:1.キーを渡す必要があります。キーのセキュリティを確保することは困難です。2.署名機能がない、つまり送信者の身元を確認できない

非対称暗号化

対称暗号化では、キーの機密性(つまり、コードブック、悪役、および上記の英語の文字間の対応など、使用される暗号化アルゴリズム)が重要です。戦争中、電信コードブックは手動のチャネルを介して送信される必要があり、それにより双方は自信を持ってそれを使用できます。

しかし、今日のネットワーク通信では、キーを渡すために手動チャネルを使用することは明らかに不可能であり、効率的かつ高速にネットワークを通過するだけです。この方法には矛盾があります。キーはネットワーク伝送のセキュリティを確保するために使用され、このキーはネットワークセキュリティに不可欠であり、ネットワークがそれを相手に渡す必要があります。

キーを保存する最も安全な方法は、誰にも言わず、渡さないことですが、対称暗号化では、復号化当事者は対応するキーを取得する必要があります。これには、キーを渡す必要がありますが、キーが渡されると、キーは失われますリスク。この「鶏は卵を産む、卵は鶏を産む」問題は常に人々を困惑させてきました。アルゴリズムが登場するまで:このアルゴリズムによって生成された鍵は、公開鍵と秘密鍵の2つの部分に分かれています。

この分割キーペアには次の特性があります。

  • 公钥和私钥是一个算法中两个不同、但内在又相关联的参数集合,同时生成,但可以独立使用。
  • 公钥加密的数据只有对应的私钥才可以解密(公钥加密后公钥也不能解密)
  • 私钥加密的数据也只有对应的公钥才可以解密。

一般的な非対称暗号化アルゴリズム:RSA、DSA、ECC、Diffie-Hellman、El Gamalなど。

RSAアルゴリズムの概要

対称暗号化モードはよく理解されていますが、非対称暗号化アルゴリズムの上記の特性は驚くべきものです。これらの特性が数学的にどのように実装されるかを最初に簡単に見てみましょう。RSAは、非対称暗号化アルゴリズムの中で最も広く使用されています。RSAを紹介しましょう。

RSA名の由来

RSAアルゴリズムは、MITで共同で作業するRon Rivest、Adi Shamir、およびLeonard Adlemanによって1977年に提案されました。RSAは、3つの姓の3文字で構成されています。

RSA暗号化は、「一方向関数」のフォワードソリューションを利用して非常にシンプルで、リバースソリューションは非常に複雑です。アイデアは次のとおりです。

  • 对两个质数相乘容易,而将其合数分解很难的这个特点进行的加密算法。 n=p1*p2,已知 p1、p2 求 n 简单,已知 n 求 p1、p2 困难。
  • (m^e)%n=c,已知 m、e、n 求 c 简单,已知 e、n、c 求 m 很难。

RSAアルゴリズムのセキュリティは、RSA問題の難しさ、つまり大きな整数に基づく因数分解の難しさに基づいています。このアルゴリズムは非常に信頼性が高く、鍵が長いほど、解読が難しくなります。公開された文献によると、現在クラックされている最長のRSA鍵は768バイナリビットです。つまり、768ビットより長いキーはクラックできません(少なくとも誰もそれを公に発表していません)。したがって、1024ビットのRSAキーは基本的に安全であり、2048ビットのキーは非常に安全であると考えることができます。

非対称暗号化のアルゴリズムは、対称暗号化よりも複雑で時間がかかります。桁数が多いほど、時間がかかります。したがって、実際の使用では、非対称暗号化プロセスを使用して対称暗号化キーを最初に渡し、次に対称暗号化を使用して後続の通信を保証するため、セキュリティと速度のバランスをとることができます。この方法については、後で詳しく説明する。

非対称暗号化を使用した通信

非対称暗号化では、公開鍵と秘密鍵のペアなので、その通信が唯一の公共で送信されて、でも公開鍵は、誰もが利用できるようにすることができます。メッセージを送信する必要がある人は、公開鍵を使用して暗号化してから送信します。秘密鍵を使用して解読できるのは私だけです。情報の内容を他人が知ることはできません。

これは一方向の暗号化にすぎませんが、双方向の暗号化はどうですか?相手側も公開鍵と秘密鍵のペアを作成できます。

  • A 根据非对称加密算法生成自己的公私钥对(PUBLIC_A,PRIVATE_A);
  • B 也根据非对称加密算法生成自己的公私钥对(PUBLIC_B,PRIVATE_B);
  • A 和 B 可以公开的交换自己的公钥(私钥不需要发送,各自保存好即可);
  • A 使用 B 的公钥 PUBLIC_B 加密信息,发送给 B;
  • B 接收到消息后,使用自己保存的私钥 PRIVATE_B 解密就可以看到消息内容(这条消息即使被他人获得后也是不能解密的);
  • 同样,B 要发消息给 A 时,使用 A 的公钥 PUBLIC_A 加密发出;
  • A 收到消息后使用自己的私钥 PRIVATE_A 解密,这样就实现了双方加密的通信。

署名

公開鍵と秘密鍵のペアを使用すると、暗号化された通信の問題が解決されるようです。しかし、実際の使用には問題があります。つまり、メッセージを受信した後、Aは送信者がBではなく第三者であることをどのように確認するのですか?実際、メッセージを送信する前に独自の秘密鍵で情報を暗号化するプロセスがもう一度実行される限り、それも非常に簡単です。今回は、独自の秘密鍵で情報を暗号化するステップを「署名」と呼びます

秘密鍵は自分だけが保持し、公開鍵と秘密鍵は1対1で対応します。つまり、公開鍵は対応する秘密鍵暗号化された情報のみを復号化できるため、秘密鍵の暗号化プロセスはIDを検証する手段として使用できます。実際、公開鍵と秘密鍵でデータを暗号化する方法と原理は同じですが、目的に応じて名前が付けられています

公開鍵は通常、暗号化に使用され、秘密鍵は署名に使用されます。

また、上記の例を使用して、暗号化と署名を使用した後の通信プロセスを確認します。

  • A 先使用自己的私钥 PRIVATE_A 对消息进行一遍加密(习惯性称作签名),再使用 B 的公钥 PUBLIC_B 加密信息,然后将加密结果发送给 B。
  • B 接收到消息后,使用自己保存的私钥 PRIVATE_B 解密,然后使用 A 的公钥 PUBLIC_A 再解密一遍,如果能解密成功,就可以确保这条消息不是伪造的。
  • 同样,B 要发消息给 A 时先使用自己的私钥 PRIVATE_B 对消息进行一遍加密(习惯性称作签名),再使用 A 的公钥 PUBLIC_A 加密后发出。
  • A 收到消息后使用自己的私钥 PRIVATE_A 解密,然后使用 B 的公钥 PUBLIC_B 再解密一遍,这样就实现了双方互相确认身份的加密通信。

由于非对称加密是复杂且耗时的,而且需要加密的内容越长就越耗时。在实际使用中一般经过摘要算法得到一串哈希值,然后使用私钥对哈希值进行加密。习惯性将这样对摘要使用私钥加密生成的文件叫做签名文件。

哈希值算法

生成摘要的哈希算法有如下特点:

  • 可以将任意长度的信息与一串固定长度的字符串建立对应关系,即哈希值定长
  • 哈希值算法将任意长度映射为有限长度,难免有碰撞(即,两个不同信息算出的摘要相同)。好的哈希值算法就是能够尽量减少碰撞的几率
  • 原始信息的任何一点修改都会导致计算出的哈希值的变化,从而可以用哈希值来确保消息体的完整性。
  • 哈希值算法是单向的,即只能从原信息计算出哈希值,不能由哈希值回算得到原信息。

但是有的人可能见过网上有破解哈希加密的,其实它并不是反向推理,而是使用"撞库"的方式。意思就是事先对大量不同的字符串进行哈希加密,然后再将原来的字符串和生成的哈希值保存起来。然后根据用户输入的哈希值来进行检索,这就是"撞库"。不过这一般都是比较简单的哈希加密(md5),而且没有加盐。

常见算法有 MD5、SHA1、SHA256、SHA512 等。

大部分网站对用户密码保护也是利用哈希值单向性这个特点。数据库只保存用户密码的哈希值,进行登录操作时,将此次输入的密码再次计算哈希值与数据库保存的哈希值对比,对比通过则认为密码正确。这样即使数据库泄露,黑客也无法获知用户的密码。

这样就演化出了目前实际使用的签名、加密过程:

  • A 先使用哈希算法将要发送的消息计算出摘要,再自己的私钥 PRIVATE_A 对摘要进行签名得到签名文件,然后将原始消息和签名文件打包到一起,使用 B 的公钥 PUBLIC_B 加密信息,发送给 B。
  • B 接收到消息后,使用自己保存的私钥 PRIVATE_B 解密,得到原始消息和一个签名文件。使用哈希算法对原始消息计算得到一个哈希值,再使用 A 的公钥 PUBLIC_A 对签名文件进行解密,得到消息的哈希值,将这两个哈希值进行对比,如果一致就可以认为这条消息是 A 发送的且未经过篡改。

公钥与证书

从上边的流程来看,似乎一切都完美了,但黑客也是绞尽脑汁的,他们还是从中找到了破绽。那就是我们对 A 的身份识别是建立在相信 PUBLIC_A 的公钥确实是 A 的,然而黑客可以轻易的发布自己的公钥宣称这是 A 的公钥来欺骗我们,那我们又怎么样区分呢?这就需要一个结构来保证了,这个机构把 A 提供的公钥和 A 的相关信息放在一起组合成一份证书,这样你从这个机构获取证书,就可以得到有权威机构背书的公钥与 A 的对应关系。

这个机构叫做 CA,发布的证书叫做 CA 证书。

证书授权中心 CA

CA 证书授权(CertificateAuthority)中心是数字证书发行的唯一机构。

CA 中心又称 CA 机构,即证书授权中心(Certificate Authority),或称证书授权机构,作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。CA 中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公开密钥。CA 机构的数字签名使得攻击者不能伪造和篡改证书。在 SET 交易中,CA 不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。它负责产生、分配并管理所有参与网上交易的个体所需的数字证书,因此是安全电子交易的核心环节。

CA 证书是逐级保证安全的,最终的根证书内置在操作系统中。由操作系统来保证,这部分下文中会进行介绍。

CA证书链如下图:

HTTPS 的安全传输过程

HTTPS 中的 S,就是 Secure(安全)的意思,这就是比 HTTP 多出的一份安全保证,浏览器验证了网站的证书后会在地址栏的左边显示绿色的锁的标志,标志该网站是安全可信任的官网。

对称加密与非对称加密的联合使用

由于非对称加密是耗时的,如果在每一次 HTTPS 的数据传输中都使用非对称加密是不合适的。实际上的做法是在第一次建立 HTTPS 连接时使用一次非对称加密传递对称加密的密钥,然后就使用对称加密来保证接下来的通信过程。

HTTPS 的通信过程如下:

  • 浏览器发出 HTTPS 请求。
  • 服务器返回本网站的证书。
  • 浏览器基于内置在操作系统中的CA证书链对网站证书的有效性进行校验。校验通过后使用证书中的公钥加密一份对称加密的密钥信息,发送给服务端。
  • 服务端收到信息后使用自己的私钥解密信息,得到浏览器提供的用于对称加密的密钥信息。之后的通信过程就使用这个对称加密的密钥来保护。

Android 的安全启动过程(SecureBoot)

上一小节可以看到 HTTPS 的证书有效性还是要基于内置在操作系统中的 CA 根证书的。

那操作系统又是如何保证系统自身以及系统内包含的 CA 根证书不被篡改的呢?我们以 Android 来举例,因为相较于 PC 而言,手机厂商的安全性目前做的更好。

手机厂商建立了手机内部处理器与手机操作系统的绑定关系(也就是说开启 SecureBoot 功能的手机是不能刷非官方系统的),一旦刷入第三方系统后,手机则会不开机。这也是利用上文提到的公钥、私钥实现的,来具体看一下:

  • 手机的处理器内部存在一块只能写一次数据的 OTP 区域,出厂时会将厂商的公钥写入。物理上就保证了这部分不可更改。
  • 手机操作系统固件会使用厂商的私钥进行加密。
  • 手机处理器的第一部分启动程序(这部分程序也是固化在处理器内部的不可更改)会使用 OTP 中的公钥对操作系统进行解密,解密成功才可以启动,否则立马变"砖"。

这个过程就叫做安全启动,即 SecureBoot 。实际过程中为了加快校验速度也使用了哈希值算法,但此处仅用于说明加密启动的过程,忽略了部分细节。

电脑端 Intel 处理器中其实也存在类似的机制,但一般情况下 PC 都希望能够灵活的安装系统,因此默认没有开启 Intel 芯片中的 SecureBoot 功能。

おすすめ

転載: www.cnblogs.com/traditional/p/12693249.html