CQOI 2018 破解D H協議

2021-09-13 10:52:37 字數 3025 閱讀 4539

傳送門

題目描述:

diffie-hellman 金鑰交換協議是一種簡單有效的金鑰交換方法。它可以讓通訊雙方在沒有事先約定金鑰(密碼)的情況下,通過不安全的通道(可能被竊聽)建立乙個安全的金鑰 k

kk,用於加密之後的通訊內容。

假定通訊雙方名為 alice 和 bob,協議的工作過程描述如下(其中 mod

modmo

d 表示取模運算):

協議規定乙個固定的質數 p

pp,以及模 p

pp 的乙個原根 g

gg。p

pp 和 g

gg 的數值都是公開的,無需保密。

alice 生成乙個隨機數 a

aa,並計算 a=g

amod

p\mathrm a=g^a\; \mathrm \;p

a=gamo

dp,將 a

\mathrm a

a 通過不安全通道傳送給 bob。

bob 生成乙個隨機數 b

bb,並計算 b=g

bmod

p\mathrm b=g^b\; \mathrm\; p

b=gbmo

dp,將 b

\mathrm

b 通過不安全通道傳送給 alice。

bob 根據收到的 a

\mathrm a

a 計算出 k=a

bmod

pk=\mathrm a^b\;\mathrm \;p

k=abmo

dp,而 alice 根據收到的 b

\mathrm

b 計算出 k=b

amod

pk=\mathrm b^a\; \mathrm\; p

k=bamo

dp。雙方得到了相同的 k

kk,即 gab

modp

g^\;\mathrm\;p

gabmod

p。kk

k 可以用於之後通訊的加密金鑰。

可見,這個過程中可能被竊聽的只有 a

\mathrm a

a、b\mathrm b

b ,而 a

aa、b

bb、k

kk 是保密的。並且根據 a

\mathrm a

a、b\mathrm b

b、pp

p、gg

g 這 4

44 個數,不能輕易計算出 k

kk ,因此 k

kk 可以作為乙個安全的金鑰。

當然安全是相對的,該協議的安全性取決於數值的大小,通常 a

aa、b

bb、p

pp 都選取數百位以上的大整數以避免被破解。然而如果 alice 和 bob 程式設計時偷懶,為了避免實現大數運算,選擇的數值都小於 2

312^

231,那麼破解他們的金鑰就比較容易了。

輸入格式:

輸入檔案第一行包含兩個空格分開的正整數 g

gg 和 ppp。

第二行為乙個正整數 n

nn,表示 alice 和 bob 共進行了 n

nn 次連線(即執行了 n

nn 次協議)。

接下來 n

nn 行,每行包含兩個空格分開的正整數 a

\mathrm a

a 和 b

\mathrm b

b ,表示某次連線中,被竊聽的 a

\mathrm a

a、b\mathrm b

b 數值。

輸出格式:

輸出包含 n

nn 行,每行 1

11 個正整數 k

kk,為每次連線你破解得到的金鑰。

樣例資料:輸入

3 31

327 16

21 3

9 26 輸出

42125

備註:

【資料規模】

對於 30

%30\%

30% 的資料,2≤a

,b,p

≤1000

2≤\mathrm a,\mathrm b,p≤1000

2≤a,b,

p≤10

00;對於 100

%100\%

100%

的資料,2≤a

,b

<

p<231

2≤\mathrm a,\mathrm b2≤

a,b<

p<23

1,2≤

g<

202≤g<20

2≤g<20

,1 ≤n

≤20

1≤n≤20

1≤n≤20

。bsgs 模板題。

題目意思就是,已知 ga%

pg^a\%p

ga%p

,g b%

pg^b\%p

gb%p

,求 gab

%p

g^\%p

gab%p。

那麼先用 bsgs 解出 a,b

a,ba,

b,然後用快速冪算 gab

%p

g^\%p

gab%

p 就可以了。

很簡單的一道題。

#include

#define ll long long

using

namespace std;

int g,p,n;

unordered_map<

int,

int>hash;

intpower

(ll a,ll b,

int p)

intbsgs

(int a,

int b,

int p)

}int

main()

return0;

}

CQOI2018 破解D H協議

題目鏈結 已知 g a a 和 g b b 求 g bmod p 可以先求 a 再得 b a 也即,在 g a equiv a pmod p 中求 a 顯然 bsgs g 是原根,這就意味著 g t bmod p 0 leq t 如何加速?考慮一種拆分方法使得可以預處理一部分,即設 t i time...

BSGS CQOI2018 破解D H協議

bsgs演算法,又稱大小步演算法 某大神稱拔山蓋世演算法 主要用來解決 a x b mod c c是質數 都是整數,已知a b c求x。具體步驟如下 先把x i m j,其中m ceil sqrt c ceil是向上取整 這樣原式就變為a i m j b mod c 再變為a j b a m i m...

CQOI2018 社交網路

當今社會,在社交網路上看朋友的訊息已經成為許多人生活的一部分。通常,乙個使用者在社交網路上發布一條訊息 例如微博 狀態 tweet等 後,他的好友們也可以看見這條訊息,並可能 的訊息還可以繼續被人轉 發,進而擴散到整個社交網路中。在乙個實驗性的小規模社交網路中我們發現,有時一條熱門訊息最終會被所有人...