proverif用來驗證密碼協議,密碼協議是利用網際網路等公共通訊渠道進行互動以實現一些與安全相關的目標的併發程式。proverif是在dolev-yao模型下進行密碼協議驗證的。在dolev-yao模型下,攻擊者可以完全控制通訊通道,可以讀取、修改、刪除以及注入訊息,攻擊者還可以操縱資料,例如:計算元組的莫個引數,使用金鑰解密資訊。proverif還將檢測不誠實的參與者行為,只有誠實的參與者會被建模。
proverif允許密碼術語和相關安全性目標以形式化的方式輸入,允許自動驗證宣告的安全性目標。假設密碼是完美的,只有攻擊者擁有所需的金鑰才能執行密碼操作。運用對等原理或者重寫規則來獲取密碼術語之間的關係。
使用proverif語言,需要分三步,第一步宣告;第二步程序巨集;第三步主程序。
假設client a和server b都有一對公私鑰,client a知道server b的公鑰(skb)。握手協議的目標就是,client a和server b分享金鑰s。client a向server b傳送請求,即【a→b:pk(ska)】;server b產生新的對稱金鑰k作為會話金鑰,b把會話金鑰和它的身份(pk(skb))相配對,用私鑰skb進行簽名,即【sign((pk(skb),k),skb)】;再用a的公鑰進行加密,即【b→a: aenc(sign((pk(skb),k),skb),pk(ska))】。當client a收到訊息後,a用自己的私鑰進行解密,驗證b的簽名使用b的公鑰,並提取會話金鑰k。
a→b:
pk(ska)
b→a:
aenc
(sign((
pk(skb)
,k),skb),pk
(ska)
)a→b:senc
(s,k)
我們希望這個協議提供三個屬性:
- 安全性:會話金鑰只有client a和server b知道;
- a對b的認證:如果b達到協議的末尾時,它相信已經和a分享了金鑰k,那麼a確實是它的對話者,也分享了k。
- b對a的認證:如果a用共享金鑰k到達了協議的末尾,那麼b提出k供a使用。
這個協議是不能抵抗中間人攻擊的。如果乙個不誠實的參與者d和b開始一場會話,那麼d隨後就可以假冒b和a進行會話。在會話結束後,a認為自己已經和b分享了私鑰s,而實際上是和d分享了私鑰s。
(
*symmetric key encryption*
) type key.
fun senc
(bitstring, key)
:bitstring.
reduc formall m:bitstring, k: key;
sdec
(senc
(m,k)
,k)=m.
(*asymmetric key encryption*)
type skey.
type pkey.
fun pk
(skey)
:pkey.
fun aenc
(bitstring, pkey)
:bitstring.
reduc formall m:bitstring, sk: skey;
adec
(aenc
(m,pk
(sk)
), sk)
= m.
(*digital signatures*)
type sskey.
type spkey.
fun spk
(sskey)
: spkey.
fun sign
(bitstring, sskey)
: bitstring.
reduc foamall m: bitstring, skk:sskey;
getmess
(sign
(m,ssk)
)= m.
reduc foramll m: bitstring, ssk: sskey;
checksign
(sign
(m, ssk)
,spk
(ssk)
)= m.
free c: channel.
free s:bitstring [private]
. query attacker
(s).
event acceptsclient
(key)
. event acceptsserver
(key,pkey)
. event termclient
(key,pkey)
. event termserver
(key)
.
query x:key,y:pkey;
event
(termclient
(x,y))==
>
event
(acceptsserver
(x,y)).
query x:key; inj-
event
(termserver
(x))
==>inj-
event
(acceptclient
(x)).
let clienta
(pka:pkey, ska:skey, pkb:spkey)
=out
(c,pka);in
(c,x:bitstring)
; let y=
adec
(x,ska) in
let (
=pka,
=pkb,k:key)
=checksign
(y,pkb) in
event acceptsclient
(k);
out(c,
senc
(s,k)).
event termclient
(k,pka)
.
let serverb
(pkb:spkey, skb:sskey)=in
(c,pkx:pkey)
; new k:key;
event acceptsserver
(k,pkx)
.out
(c,aenc
(sign
((pkb,k)
,skb)
,pkx));
in(c,x:bitstring)
; let z=
sdec
(x,k) in
if pkx=pka then event termserver
(k).
process
new ska:skey;
new skb:sskey;
let pka=
pk(ska) in out
(c,pka)
; let pkb=
spk(skb) in out
(c,pkb);(
(!clienta
(pka,ska,pkb))|
(!server
(pkb,skb)
))
4.1 宣告
type----型別、free----自由名稱、fun----建構函式;自由名稱和建構函式可以宣告公開或者私有,如果宣告為私有,則攻擊者無法獲取。
在握手協議中,定義了三種type,分別是key,skey,pkey,sskey,spkey。key是金鑰;skey是私鑰;pkey是公鑰,由skey生成;sskey是簽名使用的私鑰,spkey是簽名使用的公鑰,由sskey生成。
定義了9種函式,分別是senc()【加密函式,使用金鑰對明文進行加密】,adec()【解密函式,使用金鑰對密文進行解密,與senc()函式的關係使用析構函式進行說明(第5行)】,pk()【公鑰生成函式,由私鑰產生公鑰的過程】,aenc()【加密函式,使用金鑰對明文加密】,denc()【解密函式,使用金鑰對密文進行解密,與aenc()函式的關係使用析構函式進行說明(第16行)】,spk()【由簽名私鑰生成簽名公鑰】,sign()【使用私鑰進行簽名】,getmess()【得到簽名的明文,與簽名函式sign()的關係由析構函式決定(第27行)】,checksign()【使用簽名者的公鑰,驗證簽名,與簽名函式sign()的關係由析構函式決定(第28行)】。
第31行定義了公共通訊通道c。
第33行定義了s為私有的,不公開的。
第34行定義了攻擊者想要獲取的引數s。
第36—39行,是為了認證clienta和serverb的合法性,定義了4個事件的發生。分別是acceptsclient(key)【被client記錄它已經接受與serveb執行協議並接收對稱金鑰key】、acceptsserver(key,pkey)【server接受與client執行協議,接收金鑰key和client的公鑰pkey】、termclient(key,pkey)【client相信它已經終止了乙個協議,第乙個引數是對稱金鑰key,第二個引數是client的公鑰pkey】、termserver(key)【server相信它已經終止了與client的協議,引數是對稱金鑰key】。
client只能和server進行金鑰協商,而server可以和多個client進行金鑰協商。如果在協議的最後,如果server確認clienta是他的對話者,server只希望a→b的認證保持,所以當pkx=pka時,執行termserver(x)。
第41、42行用來實現認證屬性的。第41行不是inj-even是因為握手協議不允許client驗證收到的資訊是否是新鮮的。
分析 影像分析
1.效果圖 2.發布服務 3.引入模組 查詢影像資料esri tasks imageserviceidentifytask 引數 esri tasks imageserviceidentifyparameters esri tasks imageserviceidentifyresult esri ...
後端分析 前端分析 邊緣分析
後端分析 前端分析 邊緣分析 那麼什麼是邊緣分析呢?其實邊緣分析介於後端分析和前端分析之間。後端分析需要將原始資料上傳到後台伺服器,前端分析中原始資料在採集的地方就可以被分析,而邊緣分析要求先將乙個小範圍的待分析資料傳到乙個區域性中心 可以是乙個小型嵌入式伺服器,但是規模比後端分析中的伺服器小得多 ...
需求分析,分析需求
1.何為需求 我們吧需求兩個漢字拆分開來看 需 需要 求 要求 即需要的要求,表示想要某種東西的堅定願望 這裡插入乙個小故事,某個小男孩在上小學二年級的時候,不經意間接觸到了一種叫psp的神奇玩具,就下定決心回家找家長要,一開始小孩的父親不贊同給小孩買那個東西,後來在小孩的再三請求,甚至為此寫了份保...