Cramer-Shoup暗号
平文 m {\displaystyle m} を公開鍵 ( G , q , g 1 , g 2 , c , d , h ) {\displaystyle (G,q,g_{1},g_{2},c,d,h)} で暗号化する。
m {\displaystyle m} を G {\displaystyle G} の要素に変換する。
k {\displaystyle k} を { 0 , ... , q − 1 } {\displaystyle \{0,\ldots ,q-1\}} からランダムに選び、以下を計算する。 u 1 = g 1 k {\displaystyle u_{1}={g}_{1}^{k}} u 2 = g 2 k {\displaystyle u_{2}={g}_{2}^{k}} e = h k m {\displaystyle e=h^{k}m\,} α = H ( u 1 , u 2 , e ) {\displaystyle \alpha =H(u_{1},u_{2},e)\,} , ただし、H()は衝突耐性を持つハッシュ関数である。 v = c k d k α {\displaystyle v=c^{k}d^{k\alpha }\,}
暗号文は ( u 1 , u 2 , e , v ) {\displaystyle (u_{1},u_{2},e,v)} である。