ECC算法基于一條橢圓曲線。曲線是一個多項式的圖形表達。多項式就有常量。那么常量就是曲線的部分參數(shù)。
隨便在曲線上找兩個點A,B,A+B就是A和B兩點連線與曲線的交叉點。如果A和B是同一個點,那連線就變成了切線。
這就是一個簡單的乘法:選一個點G,再選一個倍數(shù)k,就可以算出一個結(jié)果K=kG。
其中K就是公鑰,曲線上的一個點;k就是私鑰,一個倍數(shù);G是ECC算法的一個參數(shù),對于一個選定的曲線算法固定。
公鑰作為一個點,就有坐標(biāo),x和y。對于ECC 256來說,x和y都是32個字節(jié)。任選點私鑰k也選32個字節(jié)。
由于曲線對應(yīng)的多項式是固定的,因此,知道x可以直接算出y。所以公鑰的表達方式可以是(x,y),也可以壓縮為x+標(biāo)志。有x就可以根據(jù)多項式算出兩個y,根據(jù)標(biāo)志選出其中一個y就得到了公鑰。因此公鑰是可以壓縮的。壓縮后的公鑰實際上就是256比特的x和1個比特的標(biāo)志,共257個比特,表達成字節(jié)長度就是33個字節(jié)。