Bài viết được ghim
IV. Phân tích và khai thác các lỗ hổng Web cache poisoning
- Ví dụ về tìm kiếm unkeyed values
Như ở bài viết trước đã đề cập, việc tìm kiếm các giá trị unkeyed đóng vai trò quan trọng trong tấn công web cache poisoning. Trong bài lab Web cache poisoning with an unkeyed header, chúng ta sẽ sử dụng một extension "đắc lực" trong công cụ Burp Suite để tìm kiếm các giá trị unkeyed.
Quan sát resp...
Tất cả bài viết
IV. Một số kỹ thuật tấn công n - phân tích số lớn ra tích hai thừa số nguyên tố (tiếp)
- Tấn công với số n không phải tích hai số nguyên tố lớn
Một số bạn có thể thắc mắc, mật mã RSA thực chất là bài toán lũy thừa trong module số , vậy thì tại sao buộc phải chọn là tích hai số nguyên tố lớn. Có thể chọn chỉ là một số đủ lớn, hay thậm chí chỉ là một số nguyên tố đủ lớn hay không?
Khi khôn...
III. Mật mã RSA - thực hiện (tiếp)
- Sinh số nguyên tố trong Python
Bước đầu tiên để tạo ra một cặp khóa public key và private key là lựa chọn cặp số nguyên tố , chúng sẽ đóng vai trò nền tảng cho tất cả các bước tạo khóa phía sau. Vậy thì, làm sao để tạo ra một cặp số nguyên tố ?
Ngày trước, khi không có sự hỗ trợ của các công nghệ tiên tiến, người xưa đã "lưu lại" các số nguyên tố bằng cá...
III. Mật mã RSA - thực hiện
- Kiến thức chuẩn bị
1.1. Số nguyên tố
Số nguyên tố là một khái niệm toán học quen thuộc chúng ta đã được tiếp xúc ở thời THCS. Một số tự nhiên lớn hơn .
Định lý vô hạn số nguyên tố: Từ thế kỷ III trước Công nguyên, nhà toán học Hy Lạp Ơ-Clit (Euclide) đã chỉ ra và chứng minh rằng tập hợp các số nguyên tố là vô hạn. Cách chứng minh rất đơn giản bằ...
I. Tổng quan về mật mã bất đối xứng (Asymmetric ciphers)
- Tình huống người đưa thư - khó khăn của mật mã đối xứng
Trước khi đi vào tìm hiểu mật mã bất đối xứng, xem xét tình huống như sau: Hai người ở xa A và B gửi thư cho nhau, thư được vận chuyển thông qua một người đưa thư. Ở đây, nội dung lá thư ở dạng plaintext, tức có thể xảy ra trường hợp người đưa thư đọc trộm nội dung lá thư. Bởi v...
VIII. CBC bitflipping attacks
- Điểm yếu của vector khởi tạo iv
Trong phần này, chúng ta sẽ cùng thảo luận về một dạng tấn công nhắm vào mode CBC trong mật mã đối xứng AES - CBC bitflipping attacks. Trước hết, cùng quan sát lại sơ đồ giải mã của AES CBC:
Mỗi block ciphertext sau khi trải qua quá trình "block cipher decryption" (có sự tham gia của key) đều sẽ cần một phép XOR cuối cùng để th...
VI. Mode CBC (Cipher Block Chaining) trong Block cipher và AES (tiếp)
- Challenge CTF
Challenge ECB CBC WTF là một ví dụ tốt và đơn giản để luyện tập về quá trình giải mã AES-128 với mode CBC. Mã nguồn đề bài đưa ra như sau:
from Crypto.Cipher import AES
KEY = ? FLAG = ?
@chal.route('/ecbcbcwtf/decrypt/<ciphertext>/') def decrypt(ciphertext): ciphertext = bytes.fromhex(ciphertext) ...
V. Padding trong block cipher và AES
- Kỹ thuật padding
AES-128 thực hiện mã hóa dữ liệu theo từng khối (block), mỗi khối có đầu vào là một chuỗi gồm - Kỹ thuật padding.
Khi thông điệp cần mã hóa không thể chia đều thành các chuỗi plaintext có độ dài , chúng ta có thể sử dụng kỹ thuật padding nhằm bổ sung các bytes vào block cuối cùng để cho đủ độ dài (như hình vẽ).
- Một s...
IV. Thuật toán AES - hoàn thiện
- Xây dựng hàm mã hóa và giải mã
Nhằm thực hiện mã hóa AES chúng ta có nhưng chưa đủ kiến thức thực hiện). Đối với AES-128, cùng xem lại công thức tính các word trong quá trình mở rộng khóa:
Tham khảo hàm expand_key() trong challenge Bringing It All Together
def expandkey(masterkey):
r_con = (
0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40,...
III. Thuật toán AES - thực hiện (tiếp) 7. MixColumns (tiếp)
Giải đáp bài tập phần trước: Công thức tính phần tử ở cột trong mỗi hàng lúc này có thể rút gọn lại thành:
Ví dụ, với state table:
Dựa theo công thức trên chúng ta có:
Tương tự chúng ta tính được state table mới:
Tiếp theo chúng ta cùng phân tích cách thực hiện quá trình MixColumns trong lập trình. Đối với phép toán có thể dễ dà...
III. Thuật toán AES - thực hiện (tiếp)
- AddRoundKey
Trong suốt quá trình mã hóa và giải mã, AddRoundKey được thực hiện lần (đối với AES-128), và được thực hiện ngay trước khi đi vào các round mã hóa/giải mã, đồng thời được thực hiện cuối cùng trong mỗi round:
AddRoundKey sử dụng thuật toán XOR đối với state table hiện tại và nhóm secret key tương ứng với thứ tự lần thực hiện của AddRo...
III. Thuật toán AES - thực hiện
Trong phần này chúng ta sẽ tìm hiểu kỹ hơn về từng công việc được thực hiện trong quá trình mã hóa, giải mã của thuật toán AES. Bao gồm cách xử lý, thao tác với khối dữ liệu, secret key, từng bước thực hiện trong mỗi round mã hóa. Loại thuật toán AES xét đến là AES-128.
- Thao tác với khối dữ liệu
AES-128 chia văn bản cần mã hóa thành các nhóm dữ liệu, mỗi nh...
I. Tổng quan về mật mã đối xứng (Symmetric ciphers)
- Khái niệm
Symmetric ciphers - Mật mã đối xứng (hay mật mã khóa đối xứng, mã hóa đối xứng) là một dạng mã hóa truyền thống xuất hiện từ khá sớm. Trong đó, quá trình mã hóa (encryption) và giải mã (decryption) đều sử dụng chung một khóa (khóa bí mật - secret key). Ngoài ra, vai trò của hai bên là như nhau và có thể hoán đổi cho nhau, đây cũ...
IV. Giới thiệu một số mật mã cổ điển
- Mật mã Caesar
Mật mã Caesar là một trong những mật mã cổ điển xuất hiện sớm nhất, được đặt tên theo nhà văn và nhà sử học người La Mã Julius_Caesar - người đã sử dụng nó trong các thư từ bí mật của mình. Mã hóa Caesar còn được biết đến với tên mật mã chuyển vị, biểu thị cho phương thức mã hóa dịch chuyển vị trí chữ cái.
Mật mã Caesar điển hình và thườ...
II. Một số kỹ thuật mã hóa cơ bản (tiếp)
- Mã hóa Base64
Base64 là một dạng chương trình mã hóa thực hiện mã hóa đối tượng bằng cách sử dụng bit, giúp giảm đi một phần không gian lưu trữ tài nguyên.
Để mã hóa một đối tượng sang dạng Base64, chúng ta thực hiện các bước sau:
- Bước : Chuyển đối tượng sang dạng bit.
- Bước ký tự.
- Bước : Chuyển từng nhóm tương ứng với một k...
I. Mở đầu về chuỗi bài viết Cryptography
- Lịch sử hình thành
Mật mã học (Cryptography) là một lĩnh vực nghiên cứu khoa học đóng vai trò quan trọng và hấp dẫn trong ngành khoa học máy tính (Computer Science) và an toàn thông tin (Infomation Security).
Các vấn đề liên quan đến mật mã đã xuất hiện từ hàng ngàn, chục ngàn năm trước, trước khi khái niệm của nó được định nghĩa. Sự hiện hữu đầu t...
IV. Algorithm confusion attacks
Algorithm Confusion attacks trong JWT (JSON Web Tokens) là một phương thức tấn công nhắm vào việc lợi dụng sự nhầm lẫn hoặc thiếu sót trong việc xác định thuật toán (algorithm) được sử dụng để ký hoặc xác minh JWT (Tham khảo thêm CVE-2016-5431/CVE-2016-10555). Trước hết, chúng ta sẽ tìm hiểu về hai dạng thuật toán thông dụng trong JWT: Thuật toán đối xứng (symme...
III. Phân tích các phương pháp tấn công JWT và biện pháp ngăn chặn (tiếp)
- Tấn công tham số jwk trong self-signed JWTs
Các server sử dụng JWT chứa tham số jwk xác thực người dùng thường lưu trữ danh sách hữu hạn các public keys hợp lệ trong một đường dẫn, ví dụ:
Tuy nhiên, có thể trong quá trình xây dựng ứng dụng, lập trình viên cần thực hiện kiểm thử chương trình nên đã cho phép server xá...
III. Phân tích các phương pháp tấn công JWT và biện pháp ngăn chặn (tiếp)
- Tấn công vét cạn (Brute-forcing) secret key
Trong trường hợp chương trình sinh token JWT cho người dùng sử dụng secret key không đủ tính phức tạp, kẻ tấn công hoàn toàn có thể sử dụng các công cụ với phương pháp tấn công vét cạn nhằm tìm ra secret key. Một khi secret key sử dụng để sinh các token JWT xác thực bị lộ s...
I. Kiến thức chuẩn bị (tiếp)
- Ưu, nhược điểm của JWT và lưu ý khi sử dụng
Ưu điểm
- Dữ liệu được mã hóa: JWT mã hóa thông tin người dùng bằng các thuật toán, đảm bảo tính bảo mật của dữ liệu khi truyền tải.
- Tính tích hợp: JWT có thể dễ dàng tích hợp vào nhiều ngôn ngữ lập trình khác nhau, thích nghi cao với phần lớn các công nghệ và ứng dụng hiện nay.
- Dễ dàng phát hiện khi dữ liệu bị t...
I. Kiến thức chuẩn bị
- Kiểu dữ liệu JSON
JSON (JavaScript Object Notation) là một định dạng dữ liệu nhẹ và độc lập với ngôn ngữ lập trình, được thiết kế để truyền tải và lưu trữ dữ liệu. JSON có định dạng giống như JavaScript Object, với các cặp key - value trong dấu ngoặc nhọn { } và được phân cách bằng dấu phẩy.
{ "name": "John", "age": 30, "address": { "street": "123 Main St",...