Điểm:0

bẻ khóa một lần bằng cách sử dụng lại khóa

lá cờ cn

Có một miếng đệm một lần hoạt động như sau: đưa ra thông báo "xin chào" và khóa "asdfg", nó tạo ra "hwoqu". Nó chỉ hoạt động với 26 chữ cái tiếng Anh. Đầu ra là (h(7) + a(0))%26 = h(7), (e(4) + s(18))%26 = w(22) v.v.

Vì vậy, tôi có hai bản mã được tạo như trên bằng cách sử dụng một khóa duy nhất cho cả hai bản mã. Tôi được cho là có thể bẻ khóa các văn bản đơn giản mà không cần truy cập vào khóa.

Thủ tục để làm điều này là gì?

Cho đến nay, tôi đã thử XOR hai văn bản mật mã, tức là đối với mỗi chữ cái trong c1 và c2, hãy chuyển đổi thành giá trị số tương ứng của nó và XOR chữ cái thứ n của c1 với chữ cái thứ n của c2, để tạo thành c3.

Sau đó, tôi phải sử dụng từ đó với một từ đoán như "the" bằng cách loại bỏ từ đó chống lại c3.Đây là phần mà tôi bị mắc kẹt, tôi không biết những gì tôi phải tìm kiếm ở đây.

Chỉnh sửa:

Vì vậy, vì nó là phần bổ sung chứ không phải XOR, nên đây là những gì tôi đã viết:

c1 = "ujhantamawmuzvgkterrykub"
c2 = "bpgxmkymbbpyxmogoehdefgh"

pad mã hóa và giải mã:

def oneTimePad(tin nhắn, mã):
    message_out = ""
    cho tôi trong phạm vi (len (tin nhắn)):
        
        index = (letters.find(message[i]) + alphabet.find(code[i]))%26
        message_out+= chữ cái[chỉ mục]

    trả lại thông báo_out

def otpDecrypt(mật mã, khóa):
    message_out = ""

    cho tôi trong phạm vi (len (phím)):
        chỉ số = (letters.find(cipher[i]) - alphabet.find(key[i]))%26
        message_out+= chữ cái[chỉ mục]
    trả lại thông báo_out

bánh quy giòn:

def padCracker(m1, m2, đoán): # m1, m2 danh sách các số
    m3 = list(map(lambda x, y: (x + y) %26, m1, m2))
    kiểm tra = [] # m3 + đoán mod 26
    GuessNum = danh sách (bản đồ (lambda c : alphabet.find(c), đoán))
    cho tôi trong phạm vi (len (m3) - len (đoán) +1):
        kiểm tra = danh sách (bản đồ (lambda x, y: (x+y)%26, GuessNum, m3[i: i+len(đoán)]))
        in (kiểm tra, kết thúc = "")
        
        chuỗi = ""
        cho num trong kiểm tra:
            chuỗi += chữ cái[num]

        in (chuỗi)       


in(padCracker(m1,m2, "bcd"))

điều này gợi ý rằng c1 bắt đầu bằng "the" và c2 bằng "and" với khóa "bcd" nhưng tôi không biết cách lấy phần còn lại của khóa

SAI Peregrinus avatar
lá cờ si
Gợi ý: Mã hóa có sử dụng XOR không? nó dùng để làm gì? Làm thế nào để điều đó liên quan đến các bản mã?
Shiny_and_Chrome avatar
lá cờ cn
Tôi cho rằng điều này không thực sự sử dụng XOR. Nó chỉ thêm khóa và chữ cái bản rõ giống như một mật mã vigenere. Vì vậy, quy trình để hoàn tác mật mã vigenere là gì và làm cách nào để sử dụng mối quan hệ giữa c1 và c2 để nhận được bản rõ?
SAI Peregrinus avatar
lá cờ si
Nó thêm chữ cái dòng chính và chữ cái bản rõ mod 26. Việc giải mã là như nhau. Giải pháp để thực hiện các cuộc tấn công hai lần thông thường (ví dụ: kéo nôi) là thêm bản mã mod 26. https://crypto.stackexchange.com/questions/59/taking-advantage-of-one-time-pad -key-reuse có một số câu trả lời hay.
Shiny_and_Chrome avatar
lá cờ cn
Cảm ơn, đã giúp rất nhiều. Vì vậy, tôi thêm các chữ cái của hai bản mã bởi vì đó là những gì đã được thực hiện trong quá trình mã hóa, trong khi nếu nó đã được XOR, tôi cũng sẽ thực hiện XOR của hai bản mã? Nếu tôi hiểu chính xác việc kéo nôi, tôi đoán một từ như "the" hoặc "and" hoặc "have", chuyển đổi nó thành giá trị số của nó rồi thêm từng chữ cái vào chữ cái tương ứng trong c3, ​​nếu kết quả là một từ có thể đọc được, thì điều đó mang lại cho tôi một từ đoán tiềm năng khác để sau đó xây dựng thông điệp là gì.
SAI Peregrinus avatar
lá cờ si
Chuẩn rồi. Về cơ bản, đây là OTP giống như bình thường, chỉ với XOR trên các bit được thay thế bằng mod bổ sung 26 trên các chữ cái tiếng Anh.
Shiny_and_Chrome avatar
lá cờ cn
Tôi vẫn không thể làm cái thứ chết tiệt đó hoạt động được. Tôi đã thực hiện c3 = (c1+c2) % 26, sau đó (c + đoán) % 26, nhưng không biết bắt đầu từ đâu. Toàn bộ cũi không nhấp chuột. Tôi đã cập nhật bài đăng gốc của mình để hiển thị những gì tôi đã thử.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.