Six-Bites

May 09 2022
Category: Cryptography Độ khó: EasyChallenge Tác giả: KNOXDEVTeam: OsirisProtocol (https://ctftime.org/team/151343/#.

Thể loại: Mật mã
Độ khó:
Thử thách dễ dàng Tác giả: KNOXDEV
Đội ngũ: OsirisProtocol (https://ctftime.org/team/151343/#.Ynh0zJJAj_s.link)

Lời nhắc thử thách

Bạn tôi đã gửi cho tôi một lá cờ, nhưng nó đã được mã hóa! Tôi nghe thấy họ la hét gì đó về sáu vết cắn… nhưng tôi không hiểu họ muốn nói gì! Bạn có thể giải mã lá cờ?

Bản mã: kwsbqhS} aYLH ! WYg + kDIV0yp [k

Những bước đầu tiên

Thử thách này được cho là một cuộc đi dạo trong công viên cho một người nghiện CTF và sử dụng chủ đề chung của các cuộc tấn công và xors văn bản thuần túy đã biết. Đối với một người mới, thử thách này đưa ra một trở ngại duy nhất - làm thế nào để xác định mã hóa nào đã được sử dụng. Chúng ta có thể sử dụng gợi ý (và có thể là một chút may mắn) để hiểu rằng 6 byte có thể sẽ được sử dụng trong một khóa. Có kiến ​​thức thô sơ về mật mã giúp giải quyết thách thức này - tuy nhiên, chúng ta có thể đoán dựa trên một khóa mà chúng ta sẽ sử dụng một số dạng mật mã dòng trong trường hợp này là XOR.

XOR là gì

EXclusive OR (XOR) - còn được gọi là độc quyền - là một dạng mật mã trong đó toán tử bitwise xor được sử dụng từng byte giữa một khóa và văn bản thuần túy để tạo ra bản mã hoặc giữa bản mã và khóa để tạo ra bản đơn giản bản văn.

Hàm XOR tuân theo các quy tắc sau đây rất hữu ích để hiểu logic của thử thách này:

A XOR A = 0 A XOR 0 = A
A XOR B = B XOR A (Thuộc tính giao hoán)
(A XOR B) XOR C = A XOR (B XOR C) (Thuộc tính liên kết)

Đối với chúng tôi, hãy xác định: Ciphertext = PlainText XOR Key

Lỗ hổng XOR

Về lý thuyết, XOR là siêu an toàn nếu:

  1. Một khóa ngẫu nhiên không xác định được sử dụng
  2. Không có phần nào của văn bản được biết đến

Chúng tôi biết rằng Plaintext XOR CipherText = Key (Xem bằng chứng ở cuối)

Áp dụng PlainText đã biết

Nhớ lại rằng định dạng cờ là sdctf {(đây là 6 byte sẽ hoạt động như một gợi ý khác).

Bây giờ chúng ta hãy áp dụng Plaintext XOR CipherText = Key để tìm cờ. Dưới đây là một ví dụ về cách điều này hoạt động với giá trị đầu tiên của chúng tôi:

Plaintext: s (Binary: 01110011)
Ciphertext: k (Binary: 01101011)

01110011 XOR
01101011
- - - - - - -
00011000 (Hex: 18)

Chúng tôi đã có phần đầu tiên của chìa khóa. Chúng tôi có thể áp dụng quy trình tương tự cho 5 byte tiếp theo hoặc sử dụng một số công cụ công nghệ cao hơn.

Lấy chìa khóa bằng một số công cụ gọn gàng

Cyberchef là một công cụ phi thường nếu bạn chưa sử dụng nó trước đây. Hãy thiết lập công thức của chúng tôi để sử dụng “XOR Brute Force”. Trong ô nhập liệu, chúng ta sẽ đặt ký tự đầu tiên (k). Trong XOR Brute Force, hãy đảm bảo độ dài khóa được đặt thành 1 và cũi được đặt thành văn bản rõ của s. Công thức trả về:

Phím = 18: s
Phím = 38: S

Chọn 18 vì định dạng cờ là chữ thường. Lặp lại quá trình này với 5 byte tiếp theo để lấy khóa.

Khoá = 18 13 10 16 17 13

Giải mật mã

Cuối cùng, lấy khóa và bản mã để lấy bản rõ. Sử dụng CyberChef, hãy sử dụng XOR với khóa 18 13 10 16 17 13 và đầu vào là bản mã kwsbqhS} aYLH ! WYg + kDIV0yp [k

Điều này mang lại: sdctf {KnOwN_PL1ANt3xT_A # acK} và sự cố đã được giải quyết.

Proof Of PlainText XOR CipherText = Key

Nhớ lại PlainText XOR Key = CipherText
Cho Plaintext = A Key = B và CipherText = C

Do đó: A XOR B = C

XOR A bởi cả hai bên (Vì cả hai bên bằng nhau nên kết quả là như nhau): A XOR (A XOR B) = A XOR C

Áp dụng Thuộc tính liên kết: (A XOR A) XOR B = A XOR C

Áp dụng A XOR A = 0: 0 XOR B = A XOR C

Đơn giản hóa 0 XOR B: B = A XOR C (Điều này là do bitwise 0 XOR 0 là 0 và 0 XOR 1 là 1 do đó 0 XOR B là B).

Cuối cùng, thay thế các giá trị: Key = Plaintext XOR CipherText.

© Copyright 2021 - 2022 | vngogo.com | All Rights Reserved