Tất cả câu hỏi
Ngân hàng câu hỏi trắc nghiệm có giải thích chi tiết.
3.880/20.114 câuCòn 16.234
3861A Permutation Cipher has a key length of 6, e.g., one key can be [3 2 6 1 4 5 ]. How many possible keys are there?4 lựa chọn
A460
B1080
C720
D2048
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "720". Mật mã hoán vị (Permutation Cipher) với khoá độ dài 6 chia bản rõ thành từng khối 6 ký tự rồi sắp lại vị trí theo khoá; khoá là một hoán vị của sáu vị trí, chẳng hạn [3 2 6 1 4 5], nên mỗi số từ 1 đến 6 xuất hiện đúng một lần. Số hoán vị của 6 phần tử là 6! = 1 × 2 × 3 × 4 × 5 × 6 = 720: vị trí đầu có 6 cách chọn, vị trí thứ hai còn 5, rồi 4, 3, 2, 1. "460" không phải giai thừa của số nào và không ứng với cách đếm nào. "1080" lớn hơn 6! nên đã đếm thừa các dãy có số lặp lại, vốn không phải hoán vị hợp lệ. "2048" là 2^11, kiểu đếm số khoá nhị phân 11 bit, không áp dụng cho khoá là hoán vị. Không gian 720 khoá nhỏ đến mức vét cạn tức thời, nên mật mã hoán vị đứng một mình không an toàn.
3862Which of the following is not a reason to use/prefer MAC over symmetric encryption for message authentication?5 lựa chọn
AConfidentiality protection
BApplication requirement
CPerformance
DFlexibility
ELonger protection
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Confidentiality protection". MAC (Message Authentication Code, mã xác thực thông điệp) là giá trị ngắn tính từ thông điệp và khoá bí mật, gửi kèm thông điệp ở dạng rõ; nó chứng minh nguồn gốc và tính toàn vẹn nhưng không che giấu nội dung, nên bảo vệ tính bí mật không thể là lý do chọn MAC thay cho mã hoá. "Application requirement" là lý do thật: có ứng dụng phát cùng một thông điệp tới nhiều nơi, hoặc chỉ cần xác thực mà không cần giấu nội dung. "Performance" cũng đúng: bên nhận chịu tải lớn có thể chỉ kiểm tra MAC một cách chọn lọc thay vì giải mã mọi thứ. "Flexibility" đúng vì tách xác thực khỏi bảo mật cho phép áp dụng hai cơ chế ở hai tầng khác nhau. "Longer protection" đúng vì MAC có thể lưu cùng thông điệp để kiểm tra toàn vẹn về sau, còn bản đã giải mã thì mất bảo vệ ngay sau khi nhận.
AE
BT
CY
DZ
EG
FR
Lời giải
Mở trang câu hỏi này →Đáp án đúng gồm hai ý: "G" và "R". Mã Vigenère với khoá hai ký tự dùng xen kẽ hai phép dịch Caesar: chữ ở vị trí lẻ dịch theo ký tự khoá thứ nhất, chữ ở vị trí chẵn dịch theo ký tự khoá thứ hai, nên chữ e phổ biến nhất của bản rõ bị mã thành hai chữ bản mã khác nhau tuỳ vị trí chẵn lẻ, mỗi chữ gánh khoảng nửa số lần xuất hiện của e. Vì vậy hai chữ đứng đầu bảng tần suất bản mã, "R" rồi "G", là ứng viên cho e. Cần nói thẳng: dữ kiện khoá XO không khớp chính xác với bảng tần suất, vì X = 23 biến e = 4 thành (4 + 23) mod 26 = 1, tức chữ b, còn O = 14 biến e thành (4 + 14) mod 26 = 18, tức chữ s; câu này chỉ giải được bằng lập luận tần suất, và theo lập luận đó hai chữ nhiều nhất là đáp án. "Z" đứng thứ ba, hợp làm ảnh của một chữ phổ biến khác như t hay a. "Y" đứng thứ 18, là chữ hiếm trong bản mã. "E" và "T" là chữ bản rõ phổ biến, còn trong bảng bản mã chúng chỉ đứng thứ 11 và 16.
3864Using the cryptography jargon, when Alice wants to communicate to Bob, who holds the key among Alice, Bob, and Eve3 lựa chọn
AAlice
BBob
CEve
Lời giải
Mở trang câu hỏi này →Đáp án đúng gồm hai ý: "Alice" và "Bob". Trong thuật ngữ mật mã, Alice và Bob là hai bên hợp lệ muốn trao đổi bí mật: Alice dùng khoá để mã hoá bản rõ (plaintext) thành bản mã (ciphertext), Bob dùng khoá tương ứng để giải mã; với mật mã đối xứng cả hai cùng giữ một khoá bí mật chung, với mật mã bất đối xứng thì mỗi bên giữ khoá riêng của mình. "Eve" (từ eavesdropper, kẻ nghe lén) là kẻ tấn công thụ động trên kênh truyền: theo nguyên lý Kerckhoffs, Eve được giả định biết thuật toán và thấy bản mã nhưng không có khoá, nên toàn bộ an toàn của hệ dựa vào việc khoá chỉ nằm trong tay Alice và Bob. Nếu Eve có khoá thì Eve đọc được mọi thông điệp và hệ mật coi như đã bị phá.
A3
B5
C7
D9
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "3". Với mã dịch vòng (Caesar) trên bảng 26 chữ cái, dịch k vị trí và dịch k mod 26 vị trí cho cùng kết quả, vì cứ dịch đủ 26 lần là chữ cái quay về chính nó. Tính lại: 26 × 20 = 520, 523 − 520 = 3, nên 523 mod 26 = 3; ngoài ra dịch 3 vị trí sang phải tương đương dịch 26 − 3 = 23 vị trí sang trái, nên số lần dịch tối thiểu là 3. Phương án "5" ứng với khoá 525 (525 − 520 = 5), không phải 523. Phương án "7" ứng với khoá 527 (527 − 520 = 7). Phương án "9" ứng với khoá 529 (529 − 520 = 9). Bài học chính là khoá lớn hơn 26 không làm mã dịch vòng mạnh hơn: không gian khoá thật sự chỉ có 26 giá trị, nên vét cạn rất dễ.
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "True". Trong mật mã bất đối xứng (asymmetric cryptography), khoá công khai được công bố cho mọi người, nên toàn bộ an toàn dựa vào việc không thể suy ra khoá riêng (private key) từ khoá công khai trong thời gian khả thi. Nếu suy ra được, bất kỳ ai cũng giải mã được thư gửi cho chủ khoá hoặc giả mạo chữ ký của họ. Ví dụ với RSA, khoá công khai là (n, e) và khoá riêng d; tính d đòi hỏi biết phi(n) = (p − 1)(q − 1), tức phải phân tích n thành thừa số nguyên tố, việc này không khả thi với n đủ lớn (2048 bit trở lên). "False" sai vì nếu bỏ yêu cầu này thì hệ bất đối xứng mất hết ý nghĩa bảo mật.
3867Which of the following terms is not used interchangeably with message authentication code (MAC)?5 lựa chọn
ADigital signature
BAuthenticator
CTag
DCryptographic checksum
EKeyed hash
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Digital signature". MAC (message authentication code, mã xác thực thông điệp) là một khối dữ liệu ngắn có độ dài cố định, tính từ thông điệp và một khoá bí mật chung K của hai bên; bên nhận tính lại MAC bằng cùng K để kiểm tra toàn vẹn và nguồn gốc. Vì thế nó còn được gọi là "Authenticator" (bộ xác thực), "Tag" (thẻ gắn kèm thông điệp), "Cryptographic checksum" (tổng kiểm tra mật mã, khác checksum thường ở chỗ có khoá) và "Keyed hash" (băm có khoá, như HMAC). Chữ ký số khác về bản chất: nó dùng cặp khoá bất đối xứng, ký bằng khoá riêng và ai có khoá công khai cũng kiểm được, nên cho thêm tính chống chối bỏ (non-repudiation), điều MAC với khoá dùng chung không làm được vì bên nhận cũng tạo ra được đúng MAC đó.
3868AES is not based on Feistel cipher.2 lựa chọn
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "True". AES (Rijndael) được xây dựng theo mạng thay thế hoán vị SPN (Substitution-Permutation Network): mỗi vòng xử lý toàn bộ trạng thái 128 bit qua SubBytes, ShiftRows, MixColumns và AddRoundKey, và giải mã dùng các phép nghịch đảo riêng như InvSubBytes, InvMixColumns. Cấu trúc Feistel thì khác hẳn: chia khối làm hai nửa trái phải, mỗi vòng chỉ biến đổi một nửa bằng hàm vòng F rồi XOR vào nửa kia và đổi chỗ, nhờ vậy giải mã chỉ cần chạy lại cùng mạch với khoá con theo thứ tự ngược mà F không cần khả nghịch; DES là ví dụ điển hình. Vì AES không chia đôi khối và không có bước đổi chỗ hai nửa, phát biểu AES không dựa trên Feistel là đúng, nên "False" bị loại.
ATrue
BFalse
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "False". Giải mã (decryption) là quá trình ngược: đưa bản mã (ciphertext) trở lại bản rõ (plaintext) bằng thuật toán giải mã và khoá, viết là P = D(K, C). Quá trình biến bản rõ thành bản mã, C = E(K, P), mới là mã hoá (encryption). Ví dụ với mã Caesar khoá 3, mã hoá biến chữ a thành chữ d, còn giải mã đưa chữ d về lại chữ a. Phát biểu đã đảo hai khái niệm nên sai. "True" chỉ đúng nếu câu nói về encryption; với decryption thì chiều biến đổi là từ bản mã sang bản rõ, và người nhận hợp lệ thực hiện nó nhờ nắm khoá giải mã.
A1 & 5 only
B1, 3 & 5 only
C1, 3, 4, & 5 only
DAll above
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "All above". Hạ tầng khoá công khai PKI (Public Key Infrastructure) là tập hợp phần cứng, phần mềm, con người, chính sách và thủ tục để tạo, quản lý, lưu trữ, phân phối và thu hồi chứng chỉ số dựa trên mật mã khoá công khai. Cơ quan chứng thực CA tạo và ký chứng chỉ X.509, kho chứng chỉ (repository) lưu và phân phối chúng cho người cần xác minh khoá, còn danh sách thu hồi CRL công bố chứng chỉ bị thu hồi khi khoá riêng lộ hoặc mất hiệu lực; toàn bộ vòng đời ấy là việc quản lý. Vì cả năm việc đều thuộc PKI, "1 & 5 only" thiếu lưu trữ, thu hồi và quản lý; "1, 3 & 5 only" bỏ sót lưu trữ và quản lý chứng chỉ; "1, 3, 4, & 5 only" chỉ thiếu lưu trữ, nhưng lưu chứng chỉ trong kho để người khác tra cứu cũng là trách nhiệm của PKI.
AMeet-in-the-middle attack
BMan-in-the-middle attack
CChosen-ciphertext attack
DChosen-plaintext attack
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Meet-in-the-middle attack". Tấn công gặp nhau ở giữa áp dụng cho mọi phép mã hoá nhiều lần nối tiếp như Double DES: kẻ tấn công có một cặp bản rõ và bản mã, mã hoá bản rõ với mọi khoá K1 và lưu bảng, rồi giải mã bản mã với mọi khoá K2 và tìm giá trị trùng ở giữa; công sức chỉ cỡ 2 × 2^56 = 2^57 thay vì 2^112, và nó không dựa vào tính chất riêng nào của thuật toán, chỉ dựa vào việc hai lần mã hoá chạy tuần tự. "Man-in-the-middle attack" (kẻ đứng giữa) là tấn công vào giao thức truyền thông hay trao đổi khoá như Diffie-Hellman, chen vào giữa hai bên, không phải tấn công lên cấu trúc mã khối. "Chosen-ciphertext attack" và "Chosen-plaintext attack" là các mô hình năng lực của kẻ tấn công (được chọn bản mã để giải, hay chọn bản rõ để mã hoá), không phải một kỹ thuật cụ thể khai thác việc mã hoá nối tiếp.
AWeak collision resistance
BPre-image resistance
CStrong collision resistance
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "Pre-image resistance". Kháng tiền ảnh (pre-image resistance, còn gọi là tính một chiều) đòi hỏi: cho một giá trị băm h bất kỳ, không thể tìm được một cách khả thi đầu vào x nào sao cho H(x) = h; với hàm băm đầu ra n bit, vét cạn cần cỡ 2^n lần thử. "Weak collision resistance" (kháng va chạm yếu, hay kháng tiền ảnh thứ hai) là tính chất khác: cho trước một đầu vào x cụ thể, khó tìm x' khác x có cùng giá trị băm; kẻ tấn công được biết cả đầu vào chứ không chỉ đầu ra. "Strong collision resistance" (kháng va chạm mạnh) đòi hỏi khó tìm bất kỳ cặp đầu vào khác nhau nào cho cùng giá trị băm; kẻ tấn công tự chọn cả hai đầu vào nên tấn công ngày sinh (birthday attack) chỉ cần cỡ 2^(n/2) lần. Câu hỏi chỉ nói "cho đầu ra, tìm lại đầu vào", đúng định nghĩa tiền ảnh.
A1
B3
C5
D7
E9
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "3". Trong Diffie-Hellman, Y_A = a^X_A mod p và khoá chung K = (Y_B)^X_A mod p = (Y_A)^X_B mod p. Tìm X_A bằng các luỹ thừa của 2 theo modulo 11: 2^1 = 2, 2^2 = 4, 2^3 = 8, 2^4 = 16 mod 11 = 5, 2^5 = 10, 2^6 = 20 mod 11 = 9, nên X_A = 6. Khi đó K = 3^6 mod 11: 3^2 = 9, 3^3 = 27 mod 11 = 5, 3^6 = 5^2 = 25 mod 11 = 3. Kiểm từ phía Bob: 2^7 mod 11 = 7, 2^8 mod 11 = 14 mod 11 = 3 nên X_B = 8, và 9^8 mod 11 tính qua 9^2 = 81 mod 11 = 4, 9^4 = 16 mod 11 = 5, 9^8 = 25 mod 11 = 3, khớp. "9" chính là khoá công khai Y_A chứ không phải khoá chung. "5" là 3^3 mod 11, tức dùng sai số mũ. "7" là 2^7 mod 11, chỉ là một luỹ thừa trung gian. "1" là phần tử đơn vị, chỉ ra khi số mũ là bội của bậc phần tử (chẳng hạn 3^5 = 243 mod 11 = 1), mà 6 không phải bội của 5.
AC2 = XOR(P2,E(K,XOR(C1,P2)))
BC2 = XOR(P2,E(K,XOR(C1,P1)))
CC2 = XOR(P1,E(K,XOR(C1,P1)))
DC2 = E(K,XOR(C1,P1))
EC2 = XOR(E(C1),K)
FC2 = E(K,XOR(C1,P2))
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "C2 = E(K,XOR(C1,P2))". Ở chế độ CBC (Cipher Block Chaining, mã khối móc xích), trước khi mã hoá một khối bản rõ người ta XOR nó với khối bản mã ngay trước, rồi đưa kết quả vào hàm mã hoá với khoá K; vì vậy khối thứ hai là E(K, P2 XOR C1), còn khối đầu dùng IV thay cho C1. Công thức "C2 = XOR(P2,E(K,XOR(C1,P2)))" XOR thêm P2 lần nữa ở đầu ra, không phải cấu trúc CBC. Công thức "C2 = XOR(P2,E(K,XOR(C1,P1)))" chính là OFB: khối đầu ra thứ nhất bằng C1 XOR P1, mã hoá nó ra dòng khoá thứ hai rồi XOR với P2. Công thức "C2 = XOR(P1,E(K,XOR(C1,P1)))" không hề có P2 nên không thể là bản mã của khối thứ hai. Công thức "C2 = E(K,XOR(C1,P1))" cũng thiếu P2, đây chỉ là dòng khoá thứ hai của OFB. Còn "C2 = XOR(E(C1),K)" gọi hàm mã hoá không có khoá rồi XOR với khoá, không ứng với chế độ chuẩn nào.
AH
BE
CL
DO
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "E". Mã thay thế đơn bảng (monoalphabetic cipher) thay mỗi chữ của bản rõ bằng đúng một chữ cố định của bản mã, nên tần suất của từng chữ được giữ nguyên, chỉ bị đổi tên. Trong văn bản tiếng Anh, chữ e là chữ xuất hiện nhiều nhất (khoảng 12–13% số chữ), vì vậy chữ w xuất hiện nhiều nhất trong bản mã của cả một cuốn sách gần như chắc chắn là ảnh của e; đây là nền tảng của thám mã tần suất (frequency analysis). "H" là chữ khá phổ biến nhưng đứng sau e, t, a, o nên không phải ứng viên đầu tiên. "L" chỉ thuộc nhóm tần suất trung bình, thấp hơn e rất nhiều. "O" thuộc nhóm phổ biến cùng t và a nhưng vẫn kém e, nên chỉ là ứng viên thử tiếp khi giả thuyết e không khớp. Văn bản càng dài thì phân bố tần suất càng sát phân bố chuẩn, nên phép đoán w ứng với e càng đáng tin.
A2^127 x
B2^128 x
C2^64 x
D1x
E2^63 x
F2^256 x
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "2^63 x". Câu hỏi viết "128-bit-long key" nhưng ý là giá trị băm dài n = 128 bit. Phá kháng va chạm mạnh (strong collision resistance, tìm một cặp bất kỳ trùng băm) dùng tấn công ngày sinh (birthday attack), cần cỡ 2^(n/2) = 2^64 lần băm, nên x = 2^64. Phá kháng va chạm yếu (weak collision resistance, cho trước một đầu vào, tìm đầu vào khác cùng băm) không dùng được nghịch lý ngày sinh; theo quy ước của khoá học cho tấn công tiền ảnh thứ hai "trung bình", ta coi như vét cạn 2^128 giá trị băm và trúng sau một nửa, tức 2^(128−1) = 2^127 lần. Tỉ số là 2^127 / 2^64 = 2^63. Chỗ tranh cãi: "2^64 x" có cơ sở theo quy ước khác, vì nếu mỗi lần thử ngẫu nhiên trúng với xác suất 2^(−128) thì số lần thử kỳ vọng là 2^128 và tỉ số là 2^128 / 2^64 = 2^64; ở đây chọn theo quy ước khoá học và chữ "on average". "2^127 x" lấy số lần tuyệt đối của va chạm yếu làm tỉ số, nhân thêm x sẽ ra 2^191. "2^128 x" cũng nhầm số lần tuyệt đối (kỳ vọng của phép thử ngẫu nhiên) với tỉ số. "1x" coi hai việc khó ngang nhau, trái với nghịch lý ngày sinh. "2^256 x" vượt xa cả không gian 2^128 giá trị băm.
3877What is the type of the results variable in the following code snippet?4 lựa chọncó code
import sqlite3
connection = sqlite3.connection("people.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM People")
results = cursor.fetchall()A
querySetB
listC
tupleD
dictLời giải
Mở trang câu hỏi này →Đáp án đúng: "list". Phương thức fetchall() của con trỏ sqlite3 lấy toàn bộ các dòng còn lại của kết quả truy vấn và trả về một list (danh sách), trong đó mỗi dòng mặc định là một tuple chứa giá trị các cột, chẳng hạn [('Alice', 25), ('Bob', 30)]; không có dòng nào thì trả về list rỗng. Cần lưu ý đoạn mã có lỗi tên: hàm mở kết nối đúng là sqlite3.connect, viết sqlite3.connection sẽ ném AttributeError; câu hỏi giả định đoạn mã chạy được. Phương án "querySet" gợi tới kiểu QuerySet của Django ORM, không thuộc sqlite3. Phương án "tuple" là kiểu của từng dòng bên trong kết quả, cũng là thứ fetchone() trả về, chứ không phải kiểu của cả kết quả fetchall(). Phương án "dict" chỉ đúng với từng dòng khi tự đặt connection.row_factory thành một hàm tạo dict, và ngay cả khi đó fetchall() vẫn trả về list các dict.
AAPPEND
BJOIN
CCONSTRAINT
DCONNECT
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "JOIN". Trong cơ sở dữ liệu chuẩn hoá, dữ liệu được tách ra nhiều bảng và nối với nhau bằng khoá ngoại (foreign key) trỏ tới khoá chính của bảng khác; JOIN kèm điều kiện ON ghép lại các dòng đó lúc truy vấn, ví dụ Track JOIN Album ON Track.album_id = Album.id để mỗi bài hát hiện kèm tên album. "APPEND" không phải từ khoá SQL; nó gợi nhớ phương thức append() của list Python dùng thêm phần tử vào cuối danh sách. "CONSTRAINT" dùng để khai báo ràng buộc như PRIMARY KEY, FOREIGN KEY, UNIQUE khi tạo bảng; nó bảo đảm khoá ngoại hợp lệ nhưng không ghép dòng lúc truy vấn. "CONNECT" không phải từ khoá nối bảng; kết nối tới cơ sở dữ liệu trong Python là sqlite3.connect(), còn Oracle có CONNECT BY dành cho truy vấn phân cấp chứ không phải nối bảng theo khoá ngoại.
3879What word does the following sequence of numbers represent in ASCII:
108, 105, 115, 1165 lựa chọn
Adict
Bfirst
Clist
Dmist
Ewebs
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "list". Trong ASCII chữ thường bắt đầu từ 97 cho a, nên giải từng số: 108 = 97 + 11 là chữ thứ mười hai l, 105 = 97 + 8 là i, 115 = 97 + 18 là s, 116 là t; ghép lại thành list. Trong Python có thể kiểm bằng ''.join(chr(n) for n in [108, 105, 115, 116]). "dict" sai vì mã của nó là 100, 105, 99, 116, chữ đầu d là 100 chứ không phải 108. "first" sai vì nó có năm chữ trong khi dãy chỉ có bốn số, và f mang mã 102. "mist" sai vì m mang mã 109, lệch một so với 108 là l, ba chữ sau thì trùng. "webs" sai vì w mang mã 119 và các chữ còn lại cũng khác hoàn toàn.
AAll the rows without a primary key will be updated
BIt is a syntax error
CAll the rows in the table are updated
DThe first row of the table will be updated
Lời giải
Mở trang câu hỏi này →Đáp án đúng: "All the rows in the table are updated". UPDATE dùng SET để gán giá trị mới, còn WHERE chọn những dòng sẽ bị sửa; UPDATE Users SET name = 'Charles' WHERE email = 'csev@umich.edu' chỉ sửa dòng khớp. Thiếu WHERE, lệnh áp lên toàn bộ dòng, nên UPDATE Users SET name = 'Charles' biến tên của mọi người trong bảng thành Charles. Đây là lỗi tai hại và khó gỡ nếu chưa sao lưu. "All the rows without a primary key will be updated" sai vì khoá chính không đóng vai trò lọc; dòng nào cũng bị sửa như nhau. "It is a syntax error" sai vì WHERE là mệnh đề tuỳ chọn, câu lệnh không có nó vẫn hợp lệ và cơ sở dữ liệu thực thi mà không cảnh báo. "The first row of the table will be updated" sai vì SQL không ngầm giới hạn còn một dòng, và bảng quan hệ cũng không có khái niệm dòng đầu cố định khi chưa có ORDER BY.