インターネットでは、通信内容が複数の機器やネットワークを経由するため、途中で情報を見られる可能性がある。そこで暗号を使い、第三者に見られても内容を理解できない形に変換する。暗号化と復号に使う情報が「鍵」である。
最も基本的なのが共通鍵暗号で、送信者と受信者が同じ鍵を使う。高速で実用的だが、その共通鍵をどう安全に共有するかという問題がある。Diffie–Hellmanは、この問題を解決する仕組みである。AliceとBobがそれぞれ秘密の値を持ち、公開情報だけを交換することで、秘密そのものを送らずに二人だけが同じ共通鍵を計算できる。
RSAはDiffie–Hellmanとは役割が異なる。RSAでは、秘密鍵と公開鍵のペアを作り、公開鍵は誰に渡してもよい。BobがAliceの公開鍵でデータを暗号化すると、対応する秘密鍵を持つAliceだけが復号できる。RSAでは巨大な素数二つを秘密に選び、その積を公開鍵の一部に使う。巨大な数の掛け算は簡単だが、その積から元の素数を素因数分解によって求めることが非常に難しいことが、安全性の基礎になっている。
ただし、Diffie–HellmanもRSAも、それだけでは「その公開鍵が本当に相手本人のものか」は保証しない。途中に第三者が入り、公開鍵を自分のものに差し替えると、中間者攻撃が成立する可能性がある。そのためHTTPSなどでは、証明書や電子署名を使って、公開鍵と本人・ドメインとの対応を確認する。
電子署名では、暗号化とは逆方向の役割になる。本人が秘密鍵を使って文書のハッシュ値に署名し、他人は公開鍵を使ってその署名を検証する。検証に成功すれば、その秘密鍵の所有者が署名したことと、署名後に文書が改変されていないことを確認できる。
整理すると、共通鍵暗号は「実際の通信を暗号化する」、Diffie–Hellmanは「共通鍵を安全に作る」、RSAは「公開鍵と秘密鍵を使って暗号化・復号や署名を行う」、電子署名と証明書は「相手や文書の正当性を確認する」という役割を持つ。現代の安全な通信は、これらを一つだけ使うのではなく、複数を組み合わせることで成り立っている。