What is a Algebraic Hashing? - minseok127/HashSimulator GitHub Wiki
Algebraic Hashing
Algebraic Hashing์ polynomial modulo 2๋ฅผ ํ์ฉํ๋ Hash Function์ ๋๋ค.
key๊ฐ n๊ฐ์ bit๋ก ๊ตฌ์ฑ๋๊ณ ๊ฒฐ๊ณผ๋ฌผ์ธ Hash code๊ฐ m๊ฐ์ bit๋ก ๊ตฌ์ฑ๋๋ค๋ฉด
key๋ ๊ฐ ๊ณ์๊ฐ key์ bit์ ๋์๋๋ (n - 1)์ฐจ ๋คํญ์์ผ๋ก ๋ง๋ค ์ ์๊ณ ,
Hash code๋ ๊ฐ ๊ณ์๊ฐ Hash code์ bit์ ๋์๋๋ (m - 1)์ฐจ ๋คํญ์์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ Hash Function์ ์ฌ์ฉ๋๋ m์ฐจ ๋คํญ์ P์ ์ถ๊ฐ์ ์ผ๋ก ์์ฑํฉ๋๋ค.
P ๋ํ ๋ชจ๋ ๊ณ์๊ฐ 0 ํน์ 1๋ก ํํ๋ฉ๋๋ค.
์ด๋ฌํ 3๊ฐ์ ๋คํญ์๋ค์ K(x) mod P(x) = H(x)์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ฃผ์ํ ์ ์ mod์ฐ์ฐ์ integer๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ฒ๋ผ ๋๋์ ์ฐ์ฐ์ ํ๋ ๊ฒ์ด ์๋ xor์ฐ์ฐ์ ํ๋ค๋ ๊ฒ์ ๋๋ค.
์๋ฅผ ๋ค์ด n = 15, m = 10์ด๊ณ
P(x) = 1*x^10 + 0*x^9 + 1*x^8 + 0*x^7 + 0*x^6 + 1*x^5 + 1*x^4 + 0*x^3 + 1*x^2 + 1*x + 1*x^0
K(x) = 1*x^14 + 1*x^13 + 1*x^12 + 0*x^11 + 1*x^10 + 0*x^9 + 1*x^8 + 0*x^7 + 0*x^6 + 1*x^5 + 1*x^4 + 0*x^3 + 1*x^2 + 1*x + 1*x^0
์ด์ ๊ฐ์ ๊ฐ์ ํ์ Hash code๋ฅผ ๊ตฌํด๋ณด๊ฒ ์ต๋๋ค.
K(x) mod P(x)๋ฅผ ์ฝ๊ฒ ํํํด๋ณธ๋ค๋ฉด
1 1 0 1 1
______________________________
1 0 1 0 0 1 1 0 1 1 1| 1 1 1 0 1 0 1 0 0 1 1 0 1 1 1
xor 1 0 1 0 0 1 1 0 1 1 1
______________________________
1 0 0 1 1 0 0 1 0 0 0
xor 1 0 1 0 0 1 1 0 1 1 1
______________________________
0 1 1 1 1 1 1 1 1 1 1
xor 0 0 0 0 0 0 0 0 0 0 0
______________________________
1 1 1 1 1 1 1 1 1 1 1
xor 1 0 1 0 0 1 1 0 1 1 1
______________________________
1 0 1 1 0 0 1 0 0 0 1
xor 1 0 1 0 0 1 1 0 1 1 1
______________________________
0 0 0 1 0 1 0 0 1 1 0 <= result
๊ฒฐ๊ณผ์ ์ผ๋ก H(x) = x^7 + x^5 + x^2 + x, 0010100110์ด Hash code๊ฐ ๋ฉ๋๋ค.