共通鍵暗号の1つであるS-DES(Simplified DES)をGoで実装してみたその1~key generate編~
共通鍵暗号の1つであるS-DES(Simplified DES)をGoで実装してみたその1~key generate編~
前回は公開鍵暗号の1つであるRSA暗号を実装してみたが、今回は共通鍵暗号の1つであるS-DESを実装していく。
公開鍵暗号の1つを実装してみたのであれば、共通鍵暗号の1つも実装しないわけには行かないだろう
公開鍵暗号の1つであるRSA暗号をGolangで実装してみる
注意: ところどころ簡素化してあるところはあります

GitHub - kooooohe/SimplifiedDES-Go
Contribute to kooooohe/SimplifiedDES-Go development by creating an account on GitHub.
↑のGitHubに随時追加していく予定です
DESとは
DESとは、1977年にアメリカ連邦政府標準の暗号方式として採用された、共通鍵(秘密鍵)暗号方式の一つ。 DESは旧米国立標準局(NBS、現NIST)の標準規格としての名称であるため、暗号方式(暗号アルゴリズム)そのものを指す場合は「DEA」(Data Encryption Algorithm)と呼ばれることもある。
DES - CTF Wiki
CTF Wiki

3DES
また、コンピュータの進化に伴ってより強度な暗号を生み出す必要があり、このDESの改良版である3DESもある。
※DESを三回繰り返すことにより、暗号強度を高めている。また、DESとの互換性もある
また、この互換性を持つための仕組みも知ると、思ったより簡単で面白いだろう
S-DES
S-DES(Simplified DES)は教育用に作られたDES、鍵の長さや短かったり、暗号化が8bitずつであったり、ラウンド数などがDESより短くなっているが仕組みは同じである。
※あくまで教育用で作られており暗号強度は強くないのでProductionでは使わないように
そして今回は、このS-DESを実装を通して勉強していこうと思う、
本記事ではsub keyを作るところまでをおこなう
10bitのsecret keyを用いて8bitのsub keyを2つ作るところまで
- 10bitのsecret keyを準備 (DESでは64bit)
- そこから2ラウンドで暗号化を行うので、subkeyを2つ準備(DESでは16個)
- 鍵をp10を用いて転置をおこなう
- 5bitごとにleft shiftする(DESでは1回と2回、left shiftするタイミングが決まっている)
- p8を用いてsubkey1を出力(8bit)
- 鍵を5bitごとleft shiftを2回する
- p8を用いてsubkey2を出力
blog_des_1.go
GitHub Gist: instantly share code, notes, and snippets.

package main
import "fmt"
var k1 [8]int
var k2 [8]int
func main() {
key := [10]int{1, 0, 0, 1, 0, 1, 0, 1, 0, 1}
rKey := p10(key)
rKey = leftShift(rKey)
p8(rKey, 1)
fmt.Println(k1)
rKey = leftShift(rKey)
rKey = leftShift(rKey)
p8(rKey, 2)
fmt.Println(k2)
}
func p10(oKey [10]int) (r [10]int) {
p10 := [10]int{2, 4, 1, 6, 3, 9, 0, 8, 7, 5}
for k, v := range p10 {
r[k] = oKey[v]
}
return
}
func leftShift(key [10]int) [10]int {
tmp := key[0]
for i := 0; i < 4; i++ {
key[i] = key[i+1]
}
key[4] = tmp
tmp = key[5]
for i := 5; i < 9; i++ {
key[i] = key[i+1]
}
key[9] = tmp
return key
}
func p8(key [10]int, k int) {
p8 := [8]int{5, 2, 6, 3, 7, 4, 9, 8}
if k == 1 {
for k, v := range p8 {
k1[k] = key[v]
}
} else {
for k, v := range p8 {
k2[k] = key[v]
}
}
}
これにてS-DESにおける暗号化に必要な2つのsubkeyの出力が終わった。
次回以降このkeysを使って、暗号化を実装していこうと思います。
参考:
::CryptoGraphy - University of Rhode Island ::

simplified-des-example.pdf
おすすめ本
暗号技術のすべて | IPUSIRON |本 | 通販 | Amazon
AmazonでIPUSIRONの暗号技術のすべて。アマゾンならポイント還元本が多数。IPUSIRON作品ほか、お急ぎ便対象商品は当日お届けも可能。また暗号技術のすべてもアマゾン配送商品なら通常配送無料。

