秘密な対称行列を用意し、そこから3列適当に選んで足す。何列でもいいんだけど。
4 9 2 8 3 1 0 9+8+3 20 9 8 1 1 2 9 1 8+1+2 11 2 1 6 2 9 2 x 0 = 1+2+9 = 12 8 1 2 1 0 1 1 1+1+0 2 3 2 9 0 5 8 1 2+0+5 7 1 9 2 1 8 7 0 9+1+8 18ここで(0,1,0,1,1,0)がA公開鍵、(20,11,12,2,7,18)がA秘密鍵になるわけだ。
Bも同様にして公開鍵と秘密鍵を作成しておく。
4 9 2 8 3 1 1 4+9+3 16 9 8 1 1 2 9 1 9+8+2 19 2 1 6 2 9 2 x 0 = 2+1+9 = 12 8 1 2 1 0 1 0 8+1+0 9 3 2 9 0 5 8 1 3+2+5 10 1 9 2 1 8 7 0 1+9+8 18ここでAがBにA公開鍵を渡す。Bは自分のB秘密鍵とA公開鍵を内積して1つの数字を作る。 これは結局対称行列の赤字部分の加算になっている。
16 0 4 9 2 8 3 1 19 1 9 8 1 1 2 9 12 * 0 = 19+9+10 = 38 2 1 6 2 9 2 9 1 8 1 2 1 0 1 10 1 3 2 9 0 5 8 18 0 1 9 2 1 8 7A側でも同じ処理をすることにより同じ結果38が得られる。(対称行列だからね)
実際のHDCPではここでAやBが送信側や受信側になっていて、行列の大きさは40x40、各数字は56ビットになっている、という程度の簡単なもの。ざっと見の感想としては。