Điểm:6

Tạo mật khẩu mạnh, dễ nhớ bằng mật mã cổ điển?

lá cờ cn

Mật khẩu có thể khó nhớ. Ví dụ:

H7535637353959595*9608J614625C1313^398583I0397897j^

Vì vậy, Bob muốn tạo và sử dụng một mật khẩu tốt cho GPG mà anh ấy không bao giờ phải nhớ. Anh ấy sẽ hiếm khi sử dụng mật khẩu này (mã hóa bất đối xứng để lưu trữ ngoại tuyến). Khi cần, anh ấy sẽ tạo mật khẩu của mình bằng bút chì và giấy từ một số thông tin quan trọng được lưu trữ ở một nơi: đầu của anh ấy.

Anh ấy hy vọng sẽ sử dụng mật mã cổ điển để biến những gì anh ấy không muốn hoặc không thể nhớ thành một thứ gì đó có sẵn. Bằng cách nào Bob có thể tạo một mật khẩu đủ mạnh cho GPG bằng cách sử dụng các phương pháp cổ điển?

Điều quan trọng, anh ấy muốn tránh "bảo mật" thông qua che giấu.

Một số đặc điểm và nguyên tắc đằng sau Mã VIC đến với tâm trí (dù sao):

  1. Một số có 5 chữ số (thực sự ngẫu nhiên)

67106 kéo dài đến 10 chữ số, 67106 + (6+7=3) + (7+1=8) , v.v. 6710638169

  1. Cụm từ ngắn được ghi nhớ: kantscriticalphilosophy (sử dụng 20 chữ cái đầu tiên). Kết quả là 51698273042159346708

Để làm cho một câu chuyện dài trở nên ngắn gọn, theo quy trình của Bob, hầu hết giống như quy trình của mật mã VIC (thêm chuỗi, tạo hoán vị từ 1 đến 0, thêm chữ số mà không mang), chúng tôi đến đây:

    5730481269
    KHÔNG QUẢNG CÁO
  3 BCFGHJKLMP
  9 QRTVWXYZ
  1. Bob sử dụng bàn phím dạng chân trên cụm từ dài thuộc lòng của mình:

ITISRAININGINAMSTERDAMBUTNOTINPYONGYANG và đặt kết quả trong một phép chuyển vị cột có độ dài bằng ba (không phải là một phép chuyển vị đứt quãng).

Thêm một hạt tiêu, nếu bạn muốn, ở cuối các hàng chuyển vị: *^^ và 11=A, 22=B, v.v., 111=a, 222=b, v.v., 1111=!, 2222=@, v.v.

Kết quả: H7535637353959595*9608J614625C1313^398583I0397897j^

Với một chút luyện tập, sẽ không khó để ghi nhớ một quy trình giống như mật mã VIC sử dụng.

câu hỏi:

  1. Một phương pháp như thế này có thể tạo mật khẩu đủ mạnh để sử dụng trong GPG không?

  2. Phương pháp mạnh sử dụng mật mã cổ điển để tạo mật khẩu sẽ trông như thế nào?

jjj avatar
lá cờ cn
jjj
Khi kẻ tấn công biết cách bạn tạo mật khẩu (và bạn luôn nên cho rằng điều đó), một thuật toán được áp dụng cho khóa sẽ trở nên vô dụng về mặt bảo mật. Mở rộng các phím không thêm bất kỳ bảo mật nào cả. Bạn chỉ có thể làm cho nó dễ nhớ hơn, cho phép các khóa ngẫu nhiên ban đầu dài hơn (đó là điều duy nhất bạn nên quan tâm)
lá cờ in
@jjj tốt, một chức năng dẫn xuất khóa đắt tiền về mặt tính toán sẽ tăng thêm tính bảo mật vì nó khiến việc cưỡng bức vũ phu mất nhiều thời gian hơn. Nhưng tất nhiên, tính toán một chức năng như vậy dù chỉ một lần bằng tay sau đó sẽ phải mất nhiều năm, nếu không muốn nói là hàng triệu năm.
lá cờ lu
*"... một [mật khẩu] mà anh ấy không bao giờ phải nhớ .... khi cần, anh ấy sẽ tạo mật khẩu của mình [từ] một số thông tin quan trọng được lưu trữ ở một nơi: đầu của anh ấy"*. Vì vậy, bạn muốn Bob không phải nhớ bất cứ điều gì.... bằng cách ghi nhớ điều gì đó? Điều này có vẻ thực sự vô nghĩa. Chỉ cần chọn [mật khẩu hợp lý](https://xkcd.com/936/) thay vì 51 ký tự ngẫu nhiên (như trong ví dụ đầu tiên của bạn), điều này quá dài đối với bất kỳ phương thức tấn công khả thi nào.
lá cờ tj
Điều này làm tôi nhớ đến một câu hỏi trước đây của tôi: [Strong PHP hashing without salt](https://security.stackexchange.com/questions/142659/strong-php-hashing-without-salt). TL; DL mục đích là sử dụng thông tin cá nhân để tạo mật khẩu, mà tôi có thể tạo lại một cách dễ dàng.
Điểm:21
lá cờ in

Tôi không hiểu tại sao một người lại muốn sử dụng các công cụ cổ điển hoặc bút chì và giấy để tạo dẫn xuất. Đối với bất kỳ ai tấn công kỹ thuật của bạn, điều đó sẽ không có gì khác biệt. Kẻ tấn công với máy tính hiện đại sẽ chỉ brute force phần bạn đã ghi nhớ. Bất kỳ thao tác kéo dài phím nào được thực hiện trên bút chì và giấy sẽ gây phiền toái nhỏ nhất; bất cứ điều gì được thực hiện trên giấy sẽ không tốn thêm thời gian cho một cuộc tấn công vũ phu.

Ghi nhớ điều gì đó từ nguồn entropy cao bằng các kỹ thuật ghi nhớ khác nhau thực sự hữu ích. Chọn từ ngẫu nhiên hoặc sử dụng từ viết tắt có thể hữu ích để ghi nhớ nội dung nào đó với đủ entropy. Nếu điều này sau đó được sử dụng với chức năng dẫn xuất khóa hiện đại phù hợp thì rất khó bị tấn công.

Thủ thuật bộ nhớ - tốt

Bút và giấy kéo dài - vô nghĩa

lá cờ jp
(giả sử kẻ tấn công biết bạn đã làm gì)
Meir Maor avatar
lá cờ in
Đó thực sự là thực hành tốt nhất. và câu hỏi nêu rõ mong muốn không dựa vào bảo mật bằng cách che giấu.
Điểm:7
lá cờ ng

Nếu không có giới hạn trên về độ dài của mật khẩu được sử dụng, gợi ý phổ biến nhất mà tôi biết để tạo mật khẩu mạnh, dễ nhớ (đối với một số định nghĩa về "dễ") là đồ xúc xắc.

Ý tưởng cơ bản đằng sau nó là nó chọn từng từ thông qua một cuộn 5 d6 (ví dụ: mỗi từ có $6^5= 7765= 2^{12,92}\khoảng 2^{13}$ tùy chọn). Toàn bộ mật khẩu sau đó là một số kết hợp của $k$ từ độc lập, đưa ra một mật khẩu với $\khoảng {13k}$ bit của entropy. Sau đó bạn có thể chọn $k = 6$ (hoặc các tùy chọn khác mà bạn muốn) để lấy mật khẩu với $\khoảng 80$ bit của entropy.

Tôi vừa tạo mật khẩu:

YearlingExquisiteWorstUnsortedBiểu thị Skipper

Tôi có thể ghi nhớ nó ngay lập tức? Không. Tôi có thể bịa ra một câu chuyện trong $\xấp xỉ 10$ phút để hỗ trợ rất nhiều cho việc ghi nhớ? Có thể. Nó cũng có lợi ích (lớn) là ngay cả những người dùng tương đối kém về công nghệ cũng có thể nhớ mật khẩu được tạo một cách khả thi. Nó cũng có lợi ích (một lần nữa, rất lớn) là nó "chỉ" mã hóa một tiêu chuẩn $\khoảng 80$ mật khẩu bit sử dụng danh sách từ (công khai) để hỗ trợ Nhân loại ghi nhớ. Về mặt toán học, không có gì không tầm thường đang diễn ra có thể bị tấn công.

John Smith avatar
lá cờ ru
Không cần sử dụng phần mềm. Chỉ cần chọn một bài hát mà bạn nhớ hết lời để sử dụng như một chuỗi từ. Vũ trụ của các bài hát là đủ lớn. Sau đó, trên hết, hãy chọn một thuật toán dễ nhớ và giữ kín ("chữ cái thứ hai và thứ ba của mỗi từ bắt đầu bằng một phụ âm") và bạn sẽ không gặp vấn đề gì khi giữ các chuỗi hàng trăm ký tự khó đoán một cách thích hợp trong chiều dài hoàn toàn trong đầu của bạn. Bạn thậm chí có thể viết ra bài hát nào mã hóa mật khẩu nào mà không cần sơ đồ phái sinh, thậm chí điều đó không đủ để cưỡng bức thực tế.
Mark avatar
lá cờ ng
@JohnSmith Nếu bạn định lưu trữ thông tin về mật khẩu của mình, thì không nên theo cách đặc biệt --- chỉ cần sử dụng trình quản lý mật khẩu. Nếu bạn muốn khóa chính của mình lấy từ một sơ đồ đặc biệt nào đó cũng được, nhưng tôi thấy không có lý do gì để làm điều này, vì rất khó để tranh luận về độ mạnh *định lượng* của mật khẩu của bạn. Hơn nữa, việc rèn luyện bản thân để gõ một số từ "sai" theo cách tương quan với mật khẩu của bạn có vẻ khá đáng ngờ.
Điểm:1
lá cờ cn
Leo

Thông thường, bạn sẽ sử dụng hàm dẫn xuất khóa, nhưng vì câu hỏi này là về mật mã cổ điển, nên tôi sẽ bám vào những điều cơ bản. Một ví dụ về những gì tôi sẽ làm dưới đây có thể được tìm thấy trên Wikipedia.

Ví dụ, tôi cho rằng người dùng có thể nhớ nhiều từ có độ dài khác nhau ["London", "Istanbul", "Sheffield"].

Bạn có thể sử dụng mật mã Vigenere với nhiều khóa. Khi bạn làm điều này, khóa cho mật mã sẽ trở nên dài bằng bội số chung nhỏ nhất của các từ khóa. Sử dụng các từ ví dụ, chúng tôi nhận được 72 ký tự.

Sau đó, chúng tôi bắt đầu với một chuỗi 72 "MỘT" các ký tự, sau đó mã hóa nó bằng mật mã Vigenere với mỗi từ khóa.

Từ khóa: ['LONDON', 'ISTANBUL', 'SHEFFIELD']
Bội số chung nhỏ nhất: 72
Khóa ban đầu: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Được mã hóa bằng LONDON: LONDONLONDONLONDONLONDONLONDONLONDONLONDONLONDONLONDONLONDONLONDONLONDON
Được mã hóa bằng ISTANBUL: TGGDBOFZVVHNYPHOWFEOAEIYTGGDBOFZVVHNYPHOWFEOAEIYTGGDBOFZVVHNYPHOWFEOAEIY
Được mã hóa bằng SHEFFIELD: LNKIGWJKYNORDUPSHIWVEJNGXRJVISKEDZSQQWLTBNIZDWPCYLOHMRXGZAMVCAKGDJJTIITB
Kết quả chung cuộc: LNKIGWJKYNORDUPSHIWVEJNGXRJVISKEDZSQQWLTBNIZDWPCYLOHMRXGZAMVCAKGDJJTIITB

Đây là một số mã Python thực hiện việc này.

#!/usr/bin/env python3
nhập toán
nhập khẩu hệ thống

ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

vigenere = {}

đối với tôi, chữ cái trong liệt kê (ALPHABET):
    a = danh sách(ALPHABET)
    cho _ trong phạm vi (i):
        a.append(a.pop(0))
    vigenere[chữ cái] = a

từ khóa = [x.upper() cho x trong sys.argv[1:]]

print("Từ khóa:", từ khóa)

key_len = math.lcm(*[len(x) cho x trong từ khóa])
print("Bội chung nhỏ nhất:", key_len)

phím = ["A"] * key_len

print("Khóa ban đầu:", "".join(key))
cho từ khóa trong từ khóa:
    cho tôi trong phạm vi (key_len):
        key_letter = từ khóa[i % len(từ khóa)]
        chỉ mục = ALPHABET.index(key[i])
        key[i] = vigenere[key_letter][index]
    print(f"Được mã hóa bằng {keyword}:", "".join(key))

print("Kết quả cuối cùng:", "".join(key))
Điểm:1
lá cờ am

Đánh giá theo trường hợp sử dụng và giải pháp, đó thực sự là một việc vô nghĩa. GPG được sử dụng trên máy tính, vậy tại sao bạn lại muốn tạo các bước để tạo mật khẩu theo cách thủ công nếu cuối cùng bạn vẫn cần phải viết mật khẩu qua bàn phím?

Nếu bất cứ điều gì, đó là một vectơ tấn công có thể xảy ra nếu các hướng dẫn bị rò rỉ, ví dụ: thông qua một người ở cùng địa điểm hoặc bạn để quên nó ở đâu đó mà camera/mọi người có thể đọc được.

Nếu bạn muốn mật khẩu mạnh, mật khẩu đó không được sử dụng thường xuyên và được tạo đúng cách... thì chỉ cần sử dụng trình quản lý mật khẩu để giữ cả cặp khóa và mật khẩu rác ngẫu nhiên cho nó. Một trình quản lý mật khẩu phù hợp có thể quản lý nhiều cơ sở dữ liệu mật khẩu, do đó bạn sẽ không gặp phải lỗi nào.

Những gì bạn sẽ có là một đốm màu được mã hóa mà bạn cần một mật khẩu. Đồng thời, bạn có thể có hai DB mật khẩu, một cho khóa, một cho mật khẩu, vì vậy có tổng cộng 2 mật khẩu. Tách chúng thành hai nơi và một lớp an toàn khác.

Vì vậy, TL; DR bạn chỉ cần nhớ mật khẩu và vị trí gấp N lần và mọi thứ khác sẽ là ngẫu nhiên, vì vậy không thể bị tấn công trong thời gian hợp lý và cũng được bảo mật trước các cuộc tấn công từ điển + nếu bạn không tiết lộ vị trí thì ngay cả khi mật khẩu của bạn đã bị rò rỉ (kỹ thuật xã hội hoặc lỗi sao chép-dán đơn giản vào trò chuyện), kẻ tấn công vẫn cần lấy "rương kho báu". Một chiếc chìa khóa không có lỗ khóa chỉ là một món đồ vô giá trị.

Và đó là điều tốt nhất để ghi nhớ bởi vì bạn không cần phải nhớ mật khẩu GPG, cũng như thuật toán đã tạo ra nó.

Patriot avatar
lá cờ cn
Tôi hiểu điểm đầu tiên của bạn, nhưng đó là lý do tại sao trường hợp sử dụng là lưu trữ ngoại tuyến. Tôi thấy những gì bạn đang nói trong cuộc thảo luận sau của bạn.

Đă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.