暗号アルゴリズム 【cipher algorithm】 暗号化アルゴリズム / encryption algorithm
概要
暗号アルゴリズム(cipher algorithm)とは、データの暗号化や復号を行うための計算や操作の手順を定めた規則。文脈によっては暗号化の手順のみを指す場合もある(復号の手順を復号アルゴリズムとして分ける場合)。最も単純な暗号アルゴリズムとして、例えば「アルファベット順で指定した数だけ前後にずらす(ただしAの後はZ、Zの前はA)」という文字の置き換えルールを考える。これは古代ローマで実際に使われていたとされる「シーザー暗号」と呼ばれる暗号方式である。
このアルゴリズムに「ABC」というアルファベット文字列と、ずらす字数として「2」という値を与えると、「A」は後ろに2文字ずれて「C」に、「B」は「D」に、「C」は「E」になり、「CDE」となる。このとき元になる「ABC」を「平文」(cleartext)、「2」を「暗号鍵」(cipher key)、「CDE」を「暗号文」(ciphertext)という。
復号時には暗号化と逆の手順で「C」「D」「E」をそれぞれ2文字ずつ前にずらすことで、平文「ABC」を復元することができる。手順と平文が同じでも、暗号鍵が「1」であれば暗号文は「BCD」に、「-1」ならば「ZAB」となり、鍵次第で得られる暗号文は異なる。また、手順と暗号文を入手しても、鍵が分からなければ何文字ずらしたのか分からないため復号できない。
コンピュータによる計算が普及する以前は、暗号アルゴリズム自体を秘匿して「どのような手順で作られた暗号文なのか分からない」ことで解読の困難さを高めることもあったが、現在ではアルゴリズムは標準化された公知のものを用いる前提で、鍵の割り出しにくさを暗号強度の根拠とするのが一般的となっている。
共通鍵暗号と公開鍵暗号
古代から最近まで、暗号アルゴリズムといえば暗号化と復号に同じ暗号鍵を用いる「共通鍵暗号」(秘密鍵暗号)しかなかった。この方式で通信を暗号化するには、送り手と受け手があらかじめ同じ暗号鍵(生成や利用の規則の形を取ることもある)を共有しておかなければならないという制約がある。計算が高速であるなど利点もあるため現代でも通信文の暗号化などのために大いに利用されており、AES方式が標準として広く普及している。
一方、1970年代に考案された「公開鍵暗号」では、対になる二つの鍵をセットで生成し、一方で暗号化を、もう片方で復号を行う。暗号化に用いる鍵は公開して誰でも使えるようにしておくため「公開鍵」、対になる復号用の鍵は所有者のもとで秘匿して管理されるため「秘密鍵」と呼ぶ。
鍵の所有者に秘密を伝えたい人は、その人の公開鍵を入手して暗号文を作成して送信する。所有者は対になる秘密鍵を知っているため復号して平文に戻すことができるが、本人以外は秘密鍵を持っていないため復号できない。公開鍵から秘密鍵を割り出せないよう、巨大な整数の素因数分解など数学上の問題が利用されている。
公開鍵暗号は暗号化の方式としてだけでなくデジタル署名(電子署名)を実現する要素技術としても広く普及しており、RSA暗号やElGamal暗号、楕円曲線暗号などがよく知られている。