對稱與非對稱加密
針對加密方式劃分為 對稱加密和非對稱加密
對稱加密:使用唯一祕鑰對資料進行加解密,其主要特點為速度快、使用方便、適合對大資料量進行加解密操作;主要缺點也比較明顯,需要事先約定祕鑰,當雙方通訊時就涉及到該祕鑰的交換,存在被截獲風險。
Aes演算法:將資料劃分為區塊,每個區塊128位,計算過程將其固定在4*4矩陣內,矩陣中的每一個元素為1Byte,加密金鑰可以為 128,192,256位,之後具體運算過程涉及 XOR 運算、查詢表非線性替換函式替換位元組、對行列做位移處理等,生成加密資料
golang 操作實現:
func aesDecode(private [32]byte, data *[]byte) error {
var key []byte
key = make([]byte, 32)
copy(key[:], private[:32])
block, err := aes.NewCipher(key)
if err != nil {
return fmt.Errorf("aesEncode Error: %v", err)
}
stream := cipher.NewCFBDecrypter(block, private[:block.BlockSize()])
stream.XORKeyStream(*data, *data)
return nil
}
func aesEncode(private [32]byte, data *[]byte) error {
var key []byte
key = make([]byte, 32)
copy(key[:], private[:32])
block, err := aes.NewCipher(key)
if err != nil {
return fmt.Errorf("aesEncode Error: %v", err)
}
stream := cipher.NewCFBEncrypter(block, private[:block.BlockSize()])
stream.XORKeyStream(*data, *data)
return nil
}
非對稱加密: 主要特點擁有一組金鑰對,公鑰+私鑰,私鑰個人擁有,公鑰可公開廣播,資料使用公鑰和公開演算法對資料進行加密後,私鑰可通過公開演算法解密資料。
代表演算法:RSA 、ECC
RSA 實行的是大數分解問題
ECC 橢圓曲線演算法
演算法的目的為增加逆向推導的難度,ECC橢圓曲線演算法主要將計算域遷移到了橢圓上,涉及到的數學知識為 橢圓求和,幾何定義在象限中的表現為 兩點的和等於兩點的連線與曲線的交點對x軸對稱的映象點
非對稱祕鑰演算法可用於 數字簽名和非對稱加密
ed25519 簽名演算法
curv25519 可實現非對稱加密,但非對稱加密通常不用來做為資料加密演算法,而是用來提供對稱祕鑰的祕鑰交換安全演算法,其使用方法可以為
1、明文——aes演算法加密———>密文
2、祕鑰使用非對稱加密演算法交換
aes祕鑰選取 curv25519(A祕鑰,B公鑰)=Aes祕鑰=curv25519(B祕鑰,A公鑰)
golang實現:
"golang.org/x/crypto/curve25519"
ScalarMult(dst, in, base *[32]byte)