Professional Documents
Culture Documents
Scyther Manual
Scyther Manual
Scyther
User Manual
2 Nền 7
3 Cài đặt 9
5.3 Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
5.7 Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.7.1 Macro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5.7.3 one-role-per-agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
5.8.4 Sự kiện. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.8.5 Tờ khai. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
5.8.6 Thuật Ngữ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4 CONTENTS
6 Mô hình hóa giao thức bảo mật 25
7.2.1 Aliveness. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
8.3.1 Chạy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
10.1 Mô hình hóa nhiều hơn một cặp chìa khóa không đối xứng. . . . . . . . . . . . . . . . . . . . 39
11 Đọc thêm 45
Chapter 1
3
Giới thiệu
Lưu ý: đây là bản nháp của phiên bản mới của sách hướng dẫn Scyther. Do đó, sổ tay
có thể không đầy đủ tại các điểm.
Bất kỳ thông tin phản hồi được chào đón và có thể được gửi đến CAS cremers bằng e-
mail:cas.cremers@cs.ox.ac.uk.
T là hướng dẫn sử dụng cho công cụ xác minh giao thức bảo mật Scyther.
Mục đích của sổ tay hướng dẫn này là để giải thích các chi tiết của ngôn ngữ nhập Scyther, giải
thích cách mô hình các giao thức cơ bản, và cách sử dụng hiệu quả công cụ Scyther. Sổ tay hướng dẫn
này không chi tiết mô hình thực hiện giao thức cũng như mô hình kẻ thù được sử dụng bởi công cụ. Do
đó, rất khuyên bạn nên đọc sách đi kèm [1]. Cuốn sách bao gồm một mô tả chi tiết về mô hình giao thức
cơ bản của Scyther, thông số kỹ thuật tài sản bảo mật và thuật toán.
Chúng tôi tiến hành theo cách sau. Một số nền được đưa ra trong chương 2. Chương 3 giải thích
cách cài đặt công cụ Scyther trên các nền tảng khác nhau. Trong chương 4 chúng tôi đưa ra một hướng
dẫn ngắn gọn bằng cách sử dụng các ví dụ đơn giản để hiển thị những điều cơ bản của công cụ. Sau đó,
chúng tôi thảo luận chi tiết hơn khi chúng tôi giới thiệu ngôn ngữ nhập của công cụ trong chương 5. Mô
hình hóa các giao thức cơ bản được miêu tả trong chương 6 và chương 7 mô tả cách xác định các thuộc
tính bảo mật. Việc sử dụng phiên bản GUI của công cụ sau đó được giải thích chi tiết hơn trong phần 8.
Công cụ dòng lệnh cơ bản được mô tả trong phần 9. Các chủ đề nâng cao được thảo luận trong mục 10.
Online information
Trợ giúp thêm có thể được tìm thấy trực tuyến trên Scyther website:
http://users.ox.ac.uk/~coml0529/scyther/index.html
Người dùng nên đăng ký vào danh sách gửi thư Scyther, mà chi tiết cũng có thể được tìm thấy trên trang
web của Scyther.
6 CHAPTER 1. INTRODUCTION
Chapter 2
Nền
Scyther là một công cụ cho các phân tích chính thức của các giao thức an ninh theo giả định mật mã
hoàn hảo, trong đó người ta cho rằng tất cả các chức năng mật mã là hoàn hảo: kẻ thù không học được
gì từ một tin nhắn được mã hóa trừ khi ông biết chìa khóa giải mã . Công cụ này có thể được sử dụng để
tìm các vấn đề phát sinh từ cách giao thức được xây dựng. Vấn đề này là undecidable nói chung, nhưng
trong thực tế, nhiều giao thức có thể được chứng minh là chính xác hoặc tấn công có thể được tìm thấy.
Mô hình giao thức đầy đủ, các giả định của nó, thuộc tính bảo mật cơ bản và thuật toán được mô tả
trong [1]. Sổ tay hướng dẫn này phục vụ như một người bạn đồng hành với cuốn sách. Vì vậy, trong sổ
tay này, chúng tôi giả sử người đọc là quen thuộc với các mô hình chính thức của các giao thức bảo mật
và tài sản của họ.
5
8 CHAPTER 2. BACKGROUND
Chapter 3
Cài đặt
Scyther có thể được tải về từ trang web sau đây: http://users.ox.ac.uk/~coml0529/scyther/
Hướng dẫn cài đặt được bao gồm trong các tài liệu lưu trữ có thể tải xuống Scyther. Scyther có sẵn cho
các nền tảng Windows, Linux và Mac OS.
7
10 CHAPTER 3. INSTALLATION
Chapter 4
9
10
Figure 4.1: Cửa sổ chính scyther với các tập tin ns3. spdl đang mở
13
Figure 4.2: Cửa sổ kết quả scyther
CHAPTER 4. QUICK START TUTORIAL
12
Chapter 5
Ngôn ngữ nhập
Ngôn ngữ nhập của scyther dựa trên một cú pháp giống C/Java. Mục đích chính của ngôn ngữ là để mô tả các
giao thức, được xác định bởi một tập hợp các vai trò. Vai trò, lần lượt, được xác định bởi một chuỗi các sự kiện,
hầu hết trong số đó là các sự kiện biểu thị việc gửi hoặc nhận các điều khoản.
Chúng tôi mô tả các yếu tố này trong các phần sau.
Ý kiến có thể bắt đầu với//hoặc # (đối với một dòng ý kiến) hoặc được kèm theo/* và */(đối với nhiều dòng ý
kiến). Lưu ý rằng nhận xét nhiều dòng không thể được lồng nhau.
Bất kỳ khoảng trắng giữa các yếu tố được bỏ qua. Do đó, có thể sử dụng khoảng trắng (không gian, tab, dòng
mới) để cải thiện khả năng đọc.
Một nhận dạng cơ bản bao gồm một chuỗi các ký tự từ tập hợp các ký tự chữ và số cũng như các ký hiệu ^
và -.
Ngôn ngữ là trường hợp nhạy cảm, do đó NS3 không phải là định danh tương tự như NS3.
Ở trên, chúng tôi đã xác định một giao thức gọi là "ExampleProtocol" có hai vai trò, "I" và "R" bằng cách liệt kê
chúng giữa các dấu ngoặc sau tên giao thức. Lưu ý rằng chúng tôi đã không xác định hành vi của các vai trò
này: được định nghĩa trong dấu ngoặc nhọn sau vai trò tương ứng I và vai trò R lệnh.
15
14 CHAPTER 5. INPUT LANGUAGE
Các thuật ngữ nguyên tử có thể được kết hợp thành các thuật ngữ phức tạp hơn bởi các nhà khai thác
như ghép nối và mã hóa.
Hằng
Giá trị mới được tạo ra
Nhiều giao thức bảo mật dựa vào tạo ra các giá trị ngẫu nhiên. Chúng có thể được xác định bằng cách
tuyên bố chúng bên trong một định nghĩa vai trò sử dụng tờ khai tươi. Ví dụ: để tạo một giá trị ngẫu
nhiên na loại nonce, chúng tôi chỉ định:
role X(...) {
fresh Na: Nonce;
send_1(X,Y,Na);
}
Biến
Người thực hiện có thể sử dụng biến để lưu trữ các điều khoản nhận được. Ví dụ, để nhận một nonce
vào một biến với tên na, chúng tôi chỉ định:
role Y(...) {
var Na: Nonce;
recv_1(X,Y,Na);
}
Khai báo địa phương, cho cả hai giá trị mới được tạo ra cũng như các biến như na, là địa phương để vai
trò. Do đó, người ta có thể chỉ định một nonce mới được tạo ra trong một vai trò và một biến na trong
vai trò khác mà không có bất kỳ xung đột. Biến là cứng nhắc: sau khi nhận được sự kiện đầu tiên mà
chúng xảy ra đã được thực hiện, chúng được gán một giá trị. Giá trị này không thể thay đổi sau đó.
Các biến phải xảy ra đầu tiên trong sự kiện nhận: nó không được phép sử dụng các biến
Uninitialized trong sự kiện gửi.
5.2.2 Ghép
Bất kỳ hai điều khoản có thể kết hợp thành một cặp hạn: chúng tôi viết (x, y) cho các cặp x và y. Nó
cũng được phép viết n-tuples as (x, y, z), được giải thích bởi Scyther as ((x, y), z).
Trừ khi Kir được xác định rõ ràng là một phần của cặp chìa khóa không đối xứng (giải thích bên
dưới), điều này được hiểu là mã hóa đối xứng.
Một hạ tầng khóa đối xứng được xác định trước: k (X, Y) chỉ ra khóa đối xứng dài hạn dùng chung
giữa X và Y.
15
5,2. Thuật ngữ
{ ni }pk(I)
Thuật ngữ này chỉ có thể được giải mã bởi một đại lý biết khóa bí mật SK (I). Phần 10,1 Mô
tả làm thế nào để mô hình nhiều hơn một cặp quan trọng cho mỗi người thực hiện.
Như tất cả các đại lý và giao thức nên có quyền truy cập vào một chức năng như vậy, tuyên bố của
hashfunction thường là toàn cầu, nghĩa là, được xác định bên ngoài của bất kỳ định nghĩa giao thức.
Sau khi tuyên bố, chúng có thể được sử dụng trong các thông điệp giao thức, ví.:
H1(ni)
5.2.6Predefined types
Loại ủy nhiệm cho người thực hiện.
Chức năng một loại đặc biệt xác định một thuật ngữ chức năng có thể mất một danh sách các thuật ngữ
dưới dạng tham số. Theo mặc định, nó hoạt động như một hàm băm: cho thuật ngữ h (x), trong đó h là
kiểu chức năng, không thể lấy được x.
Nonce một loại tiêu chuẩn mà thường được sử dụng và do đó xác định bên trong công cụ.
Vé một biến loại vé có thể được thay thế bằng bất kỳ hạn.
Hiệu quả của một tuyên bố như vậy là các biến của loại mới chỉ có thể được instantiated với tin nhắn m
của loại đó, nghĩa là, đã được tuyên bố bởi các tuyên bố toàn cầu const m:
MyAtomicMessage hoặc tươi mới được tạo ra m: MyAtomicMessage trong một vai trò.
Nói chung, công cụ này có thể hoạt động tốt hơn nếu biết thêm thông điệp nào có thể thống nhất hay
không. Bằng cách xác định usertype, modeler có thể thông báo cho công cụ rằng một biến chỉ có thể
được instantiated với các điều khoản của loại đó, và không phải với, ví dụ như, điều khoản của loại
nonce. Khái niệm, người ta luôn có thể viết vé (tương ứng với tất cả các tin nhắn có thể) cho mỗi loại
biến, nhưng sau đó một có thể tìm thấy các cuộc tấn công sai (trong trường hợp thực hiện trong thực tế,
kiểm tra các loại của một tin nhắn) và các công cụ sẽ ít có khả năng xác minh tài sản (cho một số không
bị chặn của chạy).
5.3 Sự kiện
5.3.1 Nhận và gửi sự kiện
Các recv và gửi sự kiện đánh dấu nhận và gửi một tin nhắn, tương ứng.
Lưu ý rằng trong một số tập tin mô tả giao thức người ta có thể tìm thấy từ khóa đọc: đây là cú pháp
lỗi thời và một cách an toàn có thể được thay thế bằng recv.
Trong hầu hết các trường hợp, mỗi sự kiện gửi sẽ có sự kiện recv tương ứng. Chúng tôi chỉ định thư
từ này bằng cách cho các sự kiện như vậy cùng nhãn, được ký hiệu bởi một.
Đối với một số giao thức, chúng tôi có thể muốn mô hình gửi hoặc nhận cho kẻ thù trực tiếp, trong
trường hợp này chúng tôi không có sự kiện tương ứng. Nếu một sự kiện gửi hoặc recv không có sự kiện
tương ứng, Scyther sẽ xuất ra một cảnh báo. Để nhấn lên cảnh báo này, nhãn có thể được tiền tố bởi một
bang!, ví dụ như.:
send_!1(I,I, LeakToAdversary );
Bí mật tuyên bố này yêu cầu một thuật ngữ tham số. Bí mật của thuật ngữ này là tuyên bố như được
định nghĩa trong [1].
SKR điều kiện xác minh cho tuyên bố này tương đương với yêu cầu bồi thường bí mật.
17
Mục đích của tuyên bố này là để thêm đánh dấu thuật ngữ tham số như là một khóa phiên. Hậu
quả là việc sử dụng khóa phiên tiết lộ quy tắc kẻ thù bây giờ sẽ tiết lộ thuật ngữ tham số.
Nếu quy tắc Hiển thị khóa phiên không được bật, tuyên bố này giống với yêu cầu bí mật.
Sự sống aliveness (của tất cả các vai trò) như được định nghĩa trong [4].
Thỏa thuận yếu kém đồng ý (của tất cả các vai trò) như được định nghĩa trong [4].
5.3. EVENTS
Cam kết, chạy các thỏa thuận không bị tổn thương với một vai trò trên một tập hợp các mục dữ liệu [4]
có thể được xác định bằng cách chèn các tuyên bố tín hiệu thích hợp. Trong bối cảnh này, cam kết
đánh dấu yêu cầu có hiệu quả, tính đúng đắn đòi hỏi sự tồn tại của một tín hiệu chạy tương ứng
trong dấu vết.
Những tuyên bố này được sử dụng để mô hình thỏa thuận về dữ liệu, được giải thích trong phần
7.2.4.
Nisynch không phun đồng bộ như được định nghĩa trong [1].
Niagree thỏa thuận không phun về tin nhắn như được định nghĩa trong [1].
Truy cập khi tuyên bố này được xác minh, Scyther sẽ kiểm tra xem tuyên bố này có thể đạt được ở tất
cả.
Đó là sự thật IFF có tồn tại một dấu vết mà trong đó yêu cầu bồi thường này xảy ra. Điều này có thể hữu
ích để kiểm tra xem không có lỗi rõ ràng trong các đặc điểm kỹ thuật giao thức, và trong thực tế
được chèn vào khi--kiểm tra chế độ của Scyther được sử dụng.
Làm rỗng tuyên bố này sẽ không được xác minh, nhưng chỉ đơn giản là bỏ qua. Nó chỉ hữu ích khi
Scyther được sử dụng như một back-end cho các phương tiện xác minh khác. Để biết thêm về
điều này, xem phần 10.
Sự kiện mới đầu tiên là sự kiện đối sánh, được sử dụng để chỉ định kết hợp mẫu, tức là.,
match(pt,m)
Trong điều kiện hoạt động, nếu có tồn tại một thay thế tốt gõ σ như σpt = m, sau đó sự kiện này có thể
được thực hiện. Sau khi thực hiện, thay thế được áp dụng cho các sự kiện còn lại của vai trò.
Sự kiện này có thể được sử dụng để mô hình các cấu trúc khác nhau, chẳng hạn như kiểm tra bình
đẳng, giải mã chậm, kiểm tra cam kết. Họ cũng có thể được sử dụng để mô hình tính toán nội bộ để đơn
giản hóa các chi tiết kỹ thuật, ví dụ.:
18 CHAPTER 5. INPUT LANGUAGE
var X: Nonce; var
Y;
Sự kiện mới thứ hai là sự kiện không phù hợp, được sử dụng để chỉ định kết hợp mẫu, tức là.,
not match(pt,m)
Việc giải thích hoạt động là đối diện của sự kiện trước đó. Nếu không có thay thế σ như vậy mà σpt =
m, sau đó sự kiện có thể được thực hiện.
Sự kiện này có thể được sử dụng để mô hình, ví dụ như, bất bình đẳng hạn chế. Ví dụ: mô hình thực
hiện cho phép các tác nhân mặc định xử lý phiên với chính họ. Trong một số trường hợp, chúng tôi
muốn loại trừ các hành vi như vậy, vì giao thức không cho phép nó. Ví dụ:,
role A {
not match(A,B); send (A,B, m1);
}
Mô hình một vai trò mà các phiên bản chỉ gửi tin nhắn cho các đại lý khác.
Như một cách sử dụng cao cấp hơn, phù hợp và không phù hợp có thể được sử dụng với nhau trong
hai vai trò với một chuỗi bắt đầu phổ biến các sự kiện để mô hình nếu... Sau đó... cấu trúc khác.
Thêm các khả năng của kẻ thù, xem phần 10 ví dụ. Khi rendering đồ thị đầu ra, Scyther sụp đổ các
phiên bản vai trò của các giao thức trợ giúp vào các nút đơn. Điều này có thể làm cho đồ thị dễ đọc hơn.
5.6Global declarations
Trong nhiều ứng dụng hằng số chung được sử dụng. Chúng bao gồm, ví dụ: hằng số chuỗi, nhãn hoặc
nhận dạng giao thức.
Chúng được mô hình hóa và sử dụng theo cách sau:
20 CHAPTER 5. INPUT LANGUAGE
usertype String; const
HelloWorld: String;
protocol hello(I,R)
{
role I {
send_1(I,R, HelloWorld);
}
role R {
recv_1(I,R, HelloWorld);
}
}
5.7 Điều khoản khác
5.7.1 Macro New in version v1.1 and Compromise-0.8
Có thể xác định các macro, nghĩa là viết tắt cho các thuật ngữ cụ thể. Cú pháp dùng để định nghĩa các
chữ viết tắt này là như sau:
macro MyShortCut = LargeTerm;
Ví dụ: đối với một giao thức có chứa thư phức tạp hoặc lặp lại các yếu tố, macro có thể được sử dụng để
đơn giản hóa giao thức đặc tả:
hashfunction h;
recv_1(I,R, { X }pk(R) );
}
}
Lưu ý rằng macro có phạm vi toàn cầu và được xử lý ở cấp độ synchiến thuật. Điều này cũng cho phép
viết tắt toàn cầu của các thông điệp giao thức, e.g.:
21
hashfunction h; macro m1 = { I,R, nI, h(nI,R) }
pk(R);
send_1(I,R, m1 );
}
role R { var nI:
Nonce;
recv_1(I,R, m1 );
}
}
Lưu ý rằng trong ví dụ trên, nI là một nonce mới được tạo ra trong vai trò của tôi, và một biến trong vai
trò R. Bởi vì các định nghĩa mac
ro được unfolded cú pháp, Macro tương tự có thể được sử dụng để đề cập đến cả hai thuật ngữ.
5.7.2 Include
Có thể nhập các tệp khác trong đặc tả giao thức:
include "filename";
trong đó tên tập tin là biểu hiện của file sẽ được đưa vào thời điểm này. Sử dụng lệnh này, có thể
chia sẻ, ví dụ: một tập hợp các định nghĩa phổ biến giữa các tệp. Thông thường, điều này sẽ bao gồm
các định nghĩa cho các cấu trúc chính và tên đại lý (không đáng tin cậy). Lồng nhau sử dụng lệnh này có
thể.
5.7.3one-role-per-agent New in version v1.1 and Compromise-0.8
Ngữ nghĩa hoạt động cho phép các đại lý để thực hiện bất kỳ vai trò, và thậm chí nhiều vai trò khác
nhau song song. Sự lựa chọn mô hình này tương ứng với kịch bản tồi tệ nhất có thể, trong đó kẻ thù có
nhiều lựa chọn nhất để khai thác. Tuy nhiên, trong nhiều thiết lập bê tông, các đại lý chỉ thực hiện một
vai trò. Ví dụ, tập hợp các máy chủ có thể được tách ra từ các tập hợp các khách hàng, hoặc tập hợp các
thẻ RFID có thể được tách ra khỏi bộ độc giả. Trong những trường hợp như vậy, chúng ta không cần
phải xem xét các cuộc tấn công khai thác rằng một đại lý có thể thực hiện nhiều vai trò. Điều này có thể
được mô phỏng bằng lệnh sau:
option "--one-role-per-agent"; // disallow agents in multiple roles
Điều này khiến cho Scyther bỏ qua các cuộc tấn công mà các đại lý thực hiện nhiều vai trò. Phrased
khác nhau, điều này tương ứng với tình hình trong đó mỗi vai trò được thực hiện bởi một bộ chuyên
dụng của các đại lý.
hiprotocol::= hglobaldeclarationi i
5.8.3 Roles
hrolei ::= [ ‘singular’ ] ‘role’ hidi ‘{’ hroledef i ‘}’ [ ‘;’ ] hroledef|
5.8.4 Events
(
hevent||‘sendi ::=’ h‘labelrecvlabeli’‘h(ilabel’]h‘from ’ih‘from(i’ ‘h,from’ih‘to,’iih‘‘claim,,’’ hhtotermlistii
5.8.6 Terms
Chapter 6
Nhiều yếu tố khác được abstracted đi. Ví dụ:, dây bit được abstracted vào điều kiện, bit dây xảy ra với xác suất
cẩu thả được abstracted đi, và hơn complext kiểm soát dòng chảy xây dựng như vòng thường được unfolded cho
một (thấp) số lượng hữu hạn của lần.
Giao thức sử dụng cơ sở hạ tầng công cộng/riêng khoá mặc định: một đại lý A có cặp khóa (PK (A), SK (A)).
Giao thức này có hai vai trò: vai chính intiator tôi và vai trò responder R. Chúng tôi cũng thêm một bình luận
đơn dòng, bắt đầu với//.
// The protocol description protocol ns3(I,R)
25
Scyther làm việc với một mô tả dựa trên vai trò của các giao thức. Chúng tôi đầu tiên mô hình vai trò khởi
đầu. Vai trò này có hai giá trị cục bộ với vai trò: nonce được tạo bởi I và nonce được nhận. Chúng ta phải tuyên
bố cả hai.
role I { fresh ni: Nonce; var nr:
Nonce;
Chúng tôi bây giờ mô hình hành vi giao tiếp của giao thức. Needham-Schroeder có ba thông điệp, và vai trò
người khởi xướng gửi đầu tiên và cuối cùng. Lưu ý các nhãn (ví dụ,/1) ở cuối các từ khóa gửi và từ khoá: những
phục vụ chỉ để giữ lại thông tin của các mũi tên kết nối trong biểu đồ chuỗi thông báo.
send_1(I,R, {I,ni}pk(R) ); recv_2(R,I, {ni,nr}pk(I) );
send_3(I,R, {nr}pk(R) );
Cuối cùng, chúng tôi thêm các yêu cầu bảo mật của giao thức. Nếu không có tuyên bố như vậy, Scyther
không biết những gì cần phải được kiểm tra.
Ở đây chúng tôi đã chọn để kiểm tra bí mật của các tạo ra và nhận được nonce, và sẽ kiểm tra các thỏa thuận
không injective và đồng bộ hóa.
claim_i1(I,Secret,ni); claim_i2(I,Secret,nr);
claim_i3(I,Niagree); claim_i4(I,Nisynch);
}
Điều này hoàn tất các đặc điểm kỹ thuật của vai trò người khởi xướng.
Đối với giao thức đơn giản này, vai trò của bộ đáp ứng rất giống với vai trò người khởi xướng. Trong thực tế,
chỉ có một vài sự khác biệt:
1. Các từ khóa var và tươi có nơi đổi chỗ: ni đã được tạo ra bởi I và một giá trị mới được tạo ra ở đó, nhưng
đối với vai trò R đó là giá trị đã nhận và do đó một biến.
2. Các từ khóa gửi và recv đã hoán đổi những nơi.
3. Các yêu cầu phải có nhãn duy nhất, vì vậy họ đã thay đổi, và vai trò thực thi yêu cầu hiện nay là R thay vì
I.
Mô tả vai trò hoàn chỉnh cho bộ đáp ứng trông như thế này:
role R
{ var ni: Nonce; fresh
nr: Nonce;
claim_r1(R,Secret,ni); claim_r2(R,Secret,nr);
claim_r3(R,Niagree); claim_r4(R,Nisynch);
}
}
Tập tin mô tả giao thức đầy đủ cho giao thức Needham-Schroeder được đưa ra trong phụ lục A.
26
nonce ni
1
{ I,ni } pk ( R )
nonce nr
2
{ R,ni,nr } pk ( I )
3
{ nr } pk ( R )
i1 r1
secret(ni ) secret(ni )
Để xác định thỏa thuận dữ liệu, ví dụ, rằng vai trò tôi đồng ý với vai trò R trên một tập hợp các điều khoản, ví dụ
như các nonces ni và Nr, một trong những chèn hai tuyên bố:
1. Vào cuối của vai trò I, chèn yêu cầu bồi thường (I, cam kết, R, ni, Nr);
2. Trong R, ngay trước khi gửi cuối cùng (trong trường hợp của một giao thức có nhiều vai trò: cuối cùng gửi
rằng nhân quả đứng trước yêu cầu bồi thường trong vai trò I), chèn yêu cầu bồi thường (R, chạy, I, ni, Nr);
Ví dụ về việc sử dụng các tuyên bố này, xem "ns3. spdl" nhập tập tin trong phân phối Scyther. Để có định nghĩa
chính thức về các tín hiệu, xem [4].
29
30 CHAPTER 7. SPECIFYING SECURITY PROPERTIES
Chapter 8
Một số cuộc tấn công đã được tìm thấy trong không gian nhà nước: Tuy nhiên, do khả năng
không thể giải quyết vấn đề, hoặc vì các chi nhánh và cấu trúc bround của việc tìm kiếm, chúng
tôi không thể chắc chắn rằng không có trạng thái tấn công khác.
31
30 CHAPTER 8. USING THE SCYTHER TOOL GUI
Trong thiết lập mặc định, Scyther sẽ ngừng quá trình xác minh sau khi tìm thấy một cuộc tấn công.
Trong phạm vi statespace, có rất nhiều cuộc tấn công này, và không có những người khác.
Chúng tương ứng chính xác với hai, nhưng xảy ra trong trường hợp yêu cầu ' reachable '. Như vậy,
các tiểu bang được tìm thấy là không thực sự tấn công nhưng các lớp học của các tiểu bang có thể
truy cập.
Không có cuộc tấn công nào được tìm thấy trong vùng statespace bị chặn, nhưng có thể có một cuộc
tấn công bên ngoài statespace bị chặn.
Lưu ý rằng vì tính chất của thuật toán, kết quả này thậm chí có thể thu được khi statespace được
bao bọc.
Điều này cần được hiểu như: Scyther không tìm thấy bất kỳ cuộc tấn công, nhưng vì nó đạt đến ràng
buộc, nó đã không khám phá những cây đầy đủ, và có thể là vẫn còn các cuộc tấn công trên giao thức.
Cách mặc định của giới hạn số lượng tối đa của chạy, hoặc phiên bản giao thức. Điều này có thể được
thay đổi trong tab cài đặt của cửa sổ chính. Nếu số lượng chạy tối đa là, ví dụ 5, và Scyther báo cáo
không có cuộc tấn công trong giới hạn, điều này có nghĩa rằng có tồn tại không có cuộc tấn công có liên
quan đến 5 chạy hoặc ít hơn. Tuy nhiên, có thể tồn tại các cuộc tấn công liên quan đến 6 chạy hoặc
nhiều hơn.
Đối với một số giao thức, tăng số lượng tối đa chạy có thể dẫn đến kết quả hoàn thành (tức là tìm một
cuộc tấn công hoặc đang được đảm bảo rằng không có cuộc tấn công), nhưng đối với các giao thức
khác, kết quả sẽ luôn là không có cuộc tấn công trong giới hạn.
Lưu ý rằng thời gian xác minh thường tăng theo cấp số nhân đối với số đếm lớn nhất.
8.3.1 Chạy
Mỗi trục dọc đại diện cho một chạy (một phiên bản của một giao thức vai trò). Như vậy, trong cuộc tấn
công này, chúng ta thấy rằng có hai chạy tham gia. Mỗi chạy bắt đầu với một hộp hình kim cương. Điều
này đại diện cho việc tạo ra một chạy, và được sử dụng để cung cấp thông tin về chạy .
Đối với chạy ở phía bên tay trái trong cuộc tấn công, chúng tôi có thông tin này:
Run #1
Agent2 in role I
I -> Agent2
R -> Agent1
32 CHAPTER 8. USING THE SCYTHER TOOL GUI
Mỗi chạy được gán một mã định danh chạy (ở đây 1), đó là một số tùy ý cho phép chúng tôi nhận dạng
duy nhất mỗi chạy. Chạy này thực hiện vai trò R của giao thức. Nó đang được thực hiện bởi một đại lý
được gọi là Agent1, những người nghĩ rằng ấp ông đang thơ chuyện với Agent2. Lưu ý rằng mặc dù
chạy 2 đang được thực hiện bởi Agent2, đại lý này không tin rằng ông đang nói chuyện với Agent1.
Run #2
Agent2 in role I
I -> Agent2
R -> Eve
Trong chạy bên phải, chúng ta thấy điều này chạy đại diện cho một phiên bản của vai trò của tôi. Từ
dòng thứ hai chúng ta có thể nhìn thấy những đại lý đang thực hiện chạy, và những người ông nghĩ rằng
ông là nói chuyện với. Trong ví dụ này, chạy được thực hiện bởi một đại lý được gọi là Agent2, người
nghĩ rằng vai trò bộ đáp ứng được thực hiện bởi các đại lý không đáng tin cậy Eve.1
Ngoài ra, các tiêu đề chạy chứa thông tin về các giá trị mới tạo (ví dụ: chạy 1 tạo nr # 1) và thông
tin về instantiation biến cục bộ (ví dụ: chạy 1 khởi tạo biến của nó ni với nonce ni # 2 hoặc chạy 2.
8.3.2Communication events
Gửi sự kiện biểu thị tin nhắn gửi. Việc gửi đầu tiên xảy ra trong cuộc tấn công này là sự kiện gửi đầu
tiên của 2 chạy.
Mỗi khi một tin nhắn được gửi đi, nó là một cách hiệu quả cho những kẻ xâm nhập. Trong trường
hợp này, bởi vì kẻ xâm nhập biết khóa bí mật SK (Eve) của các đại lý Eve, ông có thể giải mã thông
điệp và học được giá trị của nonce ni # 2.
Nhận các sự kiện tương ứng với sự tiếp thu thành công của một tin nhắn. Đầu tiên nhận sự kiện có
thể xảy ra trong cuộc tấn công này là lần đầu tiên nhận được sự kiện chạy 0.
Điều này cho chúng ta biết rằng các Agent thực hiện điều này chạy, Agent # 1, đọc một thông báo
đó là dường như đến từ Agent # 1. Thông báo nhận được là {Agent # 0, ni # 2} PK (đại lý # 1): tên của
các agent mà ông nghĩ rằng ông là giao tiếp với và nonce ni # 2, mã hóa với chìa khóa công cộng của
mình.
Mũi tên đến không cho biết gửi thư trực tiếp. Thay vào đó, nó chỉ là một ràng buộc đặt hàng: thông
báo này chỉ có thể được nhận sau khi cái gì khác đã xảy ra. Trong trường hợp này, chúng ta thấy rằng
thư chỉ có thể nhận được sau khi chạy 2 gửi tin nhắn ban đầu của mình. Lý do cho điều này là nonce ni
# 2: những kẻ xâm nhập không thể dự đoán nonce này, và do đó phải đợi cho đến khi chạy 2 đã tạo ra
nó.
Trong đồ thị các mũi tên kết nối là màu đỏ và có một nhãn "xây dựng" với nó: điều này là do thực tế
là các tin nhắn gửi không tương ứng với các thông báo nhận được. Chúng tôi biết những kẻ xâm nhập
chỉ có thể xây dựng các tin nhắn được nhận sau khi gửi tin nhắn, và do đó nó phải là trường hợp mà ông
sử dụng thông tin từ các thông báo gửi để xây dựng các tin nhắn đó là nhận được. Các khả năng khác
bao gồm một mũi tên màu xanh lá cây và màu vàng. Một mũi tên màu vàng chỉ ra rằng một tin nhắn đã
được gửi đi, và nhận được trong cùng một hình thức chính xác: Tuy nhiên, các đại lý không đồng ý về
những người đã được gửi một tin nhắn cho ai. Do đó nó được gắn nhãn "chuyển hướng" bởi vì kẻ xâm
nhập phải có chuyển hướng thư. Một mũi tên màu xanh lá cây (không có trong hình) chỉ ra rằng một tin
nhắn được nhận chính xác giống như nó đã được gửi đi, đại diện cho một thông tin liên lạc bình thường
giữa hai đại lý.
Lưu ý rằng một sự kiện recv mà không có một mũi tên đến chỉ ra rằng một thuật ngữ được nhận có
thể được tạo ra từ kiến thức ban đầu của kẻ xâm nhập. Không có sự kiện như vậy trong ví dụ, nhưng
điều này có thể xảy ra thường xuyên. Ví dụ, nếu một vai trò đọc một thông điệp đơn giản chỉ chứa một
tên đại lý, kẻ xâm nhập có thể tạo ra thuật ngữ từ kiến thức ban đầu của mình.
1 Because this agent is talking to the untrusted agent, of course all information is leaked, and no guarantees can be
given.
34 CHAPTER 8. USING THE SCYTHER TOOL GUI
8.3.3 Tuyên bố
Chapter 9
Tùy thuộc vào nền tảng của bạn, thư mục Scyther chứa một trong những thực thi sau đây:
• Scyther/scyther-linux
• Scyther/scyther-w32
• Scyther/scyther-mac
Trong phần sau đây, chúng tôi giả định rằng phiên bản Linux được sử dụng. Nếu bạn có một phiên
bản khác nhau, xin vui lòng thay thế scyther-Linux ở dưới đây bởi các thực thi cho nền tảng của bạn.
Để có được một danh sách (một số) của các tùy chọn dòng lệnh, chạy thực thi với--trợ giúp chuyển đổi,
ví dụ như:
scyther-linux --help
Để phân tích giao thức Needham-Schroeder và tạo ra một tập tin. dot (ngôn ngữ
nhập cho công cụ Graphviz) cho các cuộc tấn công, sử dụng:
Điều này mang lại một số tập tin PDF ns3-Attacks. dot [. N]. PDF có chứa các đồ thị tấn công. Để có
được một danh sách đầy đủ hơn các tùy chọn dòng lệnh, chạy thực thi với--Expert--trợ giúp chuyển
đổi, ví dụ như:
scyther-linux --expert --help
37
38 CHAPTER 9. USING THE SCYTHER COMMAND-LINE TOOLS
Chapter 10
Advanced topics
10.1Mô hình hóa nhiều hơn một cặp khóa không đối xứng
Các phím không đối xứng thường được mô phỏng với hai chức năng: một chức năng để ánh xạ các tác
nhân của các phím công khai, và một chức năng mà bản đồ đại lý cho các khóa bí mật của họ.
Theo mặc định, mỗi đại lý x có cặp khóa công cộng/cá nhân (PK (x), SK (x)). Để mô hình các phím
không đối xứng khác, trước tiên chúng ta xác định hai chức năng, ví dụ như pk2 cho chức năng khóa
công khai và SK2 cho chức năng khóa bí mật.
const pk2: Function; secret sk2:
Function;
Chúng tôi cũng tuyên bố rằng các chức năng đại diện cho cặp khóa không đối xứng:
inversekeys (pk2,sk2);
Nếu định nghĩa theo cách này, một thuật ngữ được mã hóa bằng pk2 (x) chỉ có thể giải mã bằng
SK2 (x) và ngược lại.
1. gab (mod N) and gba (mod N), để mô hình Diffie-Hellman lũy thừa.
2. k(A,B) and k(B,A), để mô hình các phím dài hạn hai chiều.
Mặc dù Scyther không cung cấp hỗ trợ trực tiếp cho các lý thuyết tương đương như vậy, có tồn tại một
cách đơn giản xấp xỉ.
Ý tưởng cốt lõi là thay vì mô hình hóa thuật ngữ bình đẳng, chúng tôi cung cấp cho kẻ thù với khả
năng tìm hiểu tất cả các thuật ngữ trong một lớp tương đương nếu ông học một trong những yếu tố của
nó. Ví dụ, đối với lớp tương đương {k (A, B), k (B, A)} chúng ta có thể cung cấp cho kẻ thù với khả
năng học k (B, A) từ k (A, B), và ngược lại. Chúng ta có thể mô hình này bằng cách giới thiệu một giao
thức Helper thích hợp (ký hiệu của tiền tố ' @ '):
39
protocol @keysymmNaive(X) {
role X {
var Y: Agent;
2. { nI }k(I,R) , sau đó chúng tôi thay đổi giao thức trợ giúp
theo cách sau:
protocol @keysymm(X,Y,Z) {
role X {
var Y: Agent;
protocol MyProtocol(Server,Client) {
role Server{
fresh T1: Timestamp;
...
/* Server uses time-stamp value */ send_2(Server,Client, { Server,
T1 }pk(Client) ); ...
}
}
protocol MyProtocol(Server,Client) {
role Server{
var T1: Timestamp;
...
/* Server uses time-stamp value */ send_2(Server,Client, { Server,
T1 }pk(Client) ); ...
}
}
Further reading
46 CHAPTER 11. FURTHER READING
43
Tham khảo
[1] Cas Cremers and Sjouke Mauw. Operational Semantics and Verification of Security Protocols.
Information Security and Cryptography. Springer, 2012.
[2] C.J.F. Cremers. Feasibility of multi-protocol attacks. In Proc. of The First International Conference
on Availability, Reliability and Security (ARES), pages 287–294, Vienna, Austria, April 2006. IEEE
Computer Society.
[3] J. Kelsey, B. Schneier, and D. Wagner. Protocol interactions and the chosen protocol attack. In B.
Christianson, B. Crispo, T.M.A. Lomas, and M. Roe, editors, Fifth International Workshop on
Security Protocols, volume 1361 of LNCS, pages 91–104. Springer, 1997.
[4] G. Lowe. A hierarchy of authentication specifications. In Proc. 10th IEEE Computer Security
Foundations Workshop (CSFW), pages 31–44. IEEE, 1997.
48 BIBLIOGRAPHY
45
Phụ Lục A
protocol ns3(I,R)
{ role I
{ fresh ni: Nonce; var
nr: Nonce;
claim_i1(I,Secret,ni); claim_i2(I,Secret,nr);
claim_i3(I,Alive); claim_i4(I,Weakagree);
claim_i5(I,Commit,R,ni,nr); claim_i6(I,Niagree);
claim_i7(I,Nisynch);
}
role R
{ var ni: Nonce; fresh nr: Nonce;
recv_1(I,R, {I,ni}pk(R) );
claim_r1(R,Secret,ni); claim_r2(R,Secret,nr);
claim_r3(R,Alive); claim_r4(R,Weakagree);
claim_r5(R,Commit,I,ni,nr); claim_r6(R,Niagree);
claim_r7(R,Nisynch);
}
}
47
Niagree, 19 Nisynch, 19 no attacks,
32 no attacks within bounds, 32
non-injective agreement, 19, 29
non-injective synchronisation, 19
Nonce, 17 nonce, 16 not match
event, 19
NS, see Needham-Schroeder protocol
one role per agent, 23 one-role-per-
agent, 23 pairing, 16 pattern match
events, 19 pk(X), 17 protocol definition,
20 quick start tutorial, 11 random value,
16 Reachable, 19 read, 18 recv, 18 role
definition, 20 run, 33 Running, 19, 29
Scyther website, 5
Secret, 18 security
properties, 18
send, 18 sk(X), 17 SKR, 18
symmetric keys, 16
symmetric-role protocol, 21
synchronisaton, 19 syntactic
equality, 39
Ticket, 17 time-
stamps, 41–42
tupling, 16 usertype,
17 var, 16 variable,
16 verification, 32
Weakagree, 18 website, see
Scyther website whitespace,
15