Điểm:0

Tìm kiếm thuật toán mã hóa đối xứng được tối ưu hóa cho bản mã ngắn và con người có thể đọc được

lá cờ cn

Trong ứng dụng của tôi, người dùng đăng nhập khi được kết nối với cơ sở dữ liệu trung tâm và thông tin đăng nhập của họ được xác thực dựa trên dữ liệu đó và được lưu vào bộ đệm (được mã hóa). Sau đó, khi người dùng ngoại tuyến, thông tin đăng nhập của họ sẽ được xác thực dựa trên bộ đệm đó. Càng xa càng tốt.

Nhưng đôi khi, người dùng PHẢI sử dụng ứng dụng khi ngoại tuyến VÀ bộ đệm dữ liệu bị hỏng nên họ không thể đăng nhập. Không có khả năng truy cập internet, ngay cả qua điểm phát sóng điện thoại di động, nhưng nhiệm vụ quan trọng vẫn là có thể chạy ứng dụng và không có thời gian để đi đâu đó và cố gắng tìm kết nối internet.

Vì vậy, tôi đã được giao nhiệm vụ triển khai phương thức đăng nhập ngoại tuyến để người dùng có thể gọi cho bộ phận hỗ trợ kỹ thuật từ điện thoại cố định tại cơ sở và nhận mã bằng lời nói mà họ có thể nhập và phần mềm sẽ nhận dạng mã này và coi đó là xác thực hợp lệ. Vì quá trình chuyển giao thông qua giọng nói của con người nên mã này phải ngắn gọn hợp lý và con người có thể hiểu được (ví dụ:không phải là chuỗi mã hóa base64 100 ký tự).

Mã phải nhúng ít nhất id người dùng (số nguyên) và ngày hết hạn (cũng có thể chỉ là số nguyên, chẳng hạn như số ngày kể từ ngày 1/1/2022) và sẽ chỉ được cấp cho cùng một người một lần trong cùng một ngày, để ngày hiện tại có thể hoạt động như một bảng thời gian.

Ngoài ra, nó không cần phải quá an toàn, chỉ cần đủ để ngăn ai đó đoán mã của ngày mai bằng cách dùng thử và sai. (Họ đã cài đặt ứng dụng nhị phân, vì vậy với đủ kỹ năng, họ có thể gỡ lỗi nó và bỏ qua mã xác thực hoàn toàn; tôi không cố gắng loại bỏ NSA, chỉ là kẻ gây rối "thông thường".)

Làm thế nào điều này có thể được thực hiện?

Fleeep avatar
lá cờ br
'người dùng có thể gọi hỗ trợ kỹ thuật từ điện thoại cố định tại cơ sở và nhận mã bằng lời nói" có vẻ rất không an toàn. Bạn đã cân nhắc sử dụng mã thông báo (phần cứng-), cung cấp cụm từ để đăng nhập chưa?
lá cờ cn
Tại sao không an toàn? Ai đó có thể nghe lén cuộc gọi, nhưng tôi không lo lắng về việc ai đó nhận được mã chỉ hoạt động trong một ngày. Và tôi cũng không lo lắng về việc mạo danh.
Fleeep avatar
lá cờ br
nếu bạn không lo lắng về việc mạo danh, thì tại sao Người dùng cần đăng nhập? Và, bạn có thể vui lòng chỉ định ý nghĩa của "bộ đệm dữ liệu bị hỏng" không. Vì mã nhận được qua cuộc gọi điện thoại cũng sẽ phải được xác thực bằng cách nào đó (tức là đối với một số thông tin được lưu trong Ứng dụng). Nếu Ứng dụng không có bất kỳ bộ nhớ đệm (liên tục) nào, thì bạn chỉ còn lại dữ liệu "được mã hóa cứng" trong Ứng dụng, dữ liệu này không thể thay đổi đối với những người dùng khác nhau.
lá cờ cn
Bộ đệm là một tệp, nhưng đôi khi trong trường, tệp này bị hỏng hoặc bị xóa do lỗi của người dùng, do lỗi của chúng. Nhưng chúng tôi vẫn cần chạy ứng dụng nếu không chúng tôi trông thật tệ với tư cách là một công ty. Tuy nhiên, ứng dụng vẫn có các thuật toán của nó--trừ khi chúng xóa hoặc làm hỏng tệp thực thi, và tất nhiên là chúng tôi đã bị lừa--và thuật toán đó có thể chạy và xác minh rằng một mã là "mã cửa sau" hợp lệ cho ngày hôm nay.
lá cờ cn
Bằng cách mạo danh, ý tôi là một người dùng không được ủy quyền giả vờ là người khác và gọi điện và yêu cầu mã cửa sau hoặc ai đó chặn cuộc gọi và giả vờ là bộ phận hỗ trợ kỹ thuật. Người dùng và bộ phận hỗ trợ kỹ thuật đều biết nhau và chúng tôi cho rằng chỉ cần nhận ra nhau bằng giọng nói là đủ bảo mật ở đây.
lá cờ cn
Vì vậy, nhiệm vụ là: bộ phận hỗ trợ kỹ thuật có thể cung cấp mã bằng lời nói mà ứng dụng có thể giải mã để tiết lộ id người dùng, trong đó "bằng lời nói" ngụ ý ngắn gọn và con người có thể sử dụng được không?
Điểm:2
lá cờ br

Không, nếu không có "bộ đệm dữ liệu" (cục bộ), mã do "hỗ trợ kỹ thuật" cung cấp không thể phụ thuộc vào "ít nhất một id người dùng (số nguyên) và ngày hết hạn".

Chi tiết hơn: Câu hỏi yêu cầu xác thực (một lần), trong đó

  1. đầu vào có thể dễ dàng được cung cấp bởi con người, thông qua một kênh được xác thực (cũng không bị nghe trộm).
  2. ứng dụng không có bộ nhớ liên tục/dành riêng cho người dùng.

Vấn đề chính mà tôi thấy là "bộ đệm dữ liệu bị hỏng": Để ​​xác minh đầu vào, thuật toán sẽ phải so sánh kết quả với đầu vào khác.


Ví dụ: hãy xem xét thủ tục đăng nhập dựa trên hàm băm được đơn giản hóa quá mức: Người dùng cung cấp mật khẩu. Một thuật toán lấy mật khẩu làm đầu vào, cùng với một chuỗi do bộ đệm dữ liệu cung cấp; tính toán hàm băm của mật khẩu và so sánh nó với chuỗi.

Nếu không có bộ đệm dữ liệu, thì thuật toán chỉ có thể sử dụng mã hóa cứng các giá trị, tức là các giá trị được cung cấp cùng với ứng dụng và không phụ thuộc vào đầu vào của người dùng.


Bình luận: "để ngày hiện tại có thể hoạt động như một bảng thời gian."

Lưu ý rằng để bảng một lần được bảo mật hoàn hảo, khóa phải là ngẫu nhiên.Điều này không thêm bất kỳ bảo mật.


Ngoài phạm vi vì điều này không được coi là an toàn hoặc trong phạm vi của câu hỏi OP:

Nếu bạn muốn có một giá trị được mã hóa cứng cho một ngày cụ thể, cách đơn giản nhất cho việc này là đưa các hình ảnh mã hóa cứng của hàm một chiều (được khởi tạo bằng hàm băm mật mã) vào ứng dụng. Sau đó, bộ phận hỗ trợ kỹ thuật có thể cung cấp cụm mật khẩu mà con người có thể đọc được (Cf. Stackexchange: Cụm mật khẩu từ điển dài, Stackexchange: Tại sao sử dụng ký tự ngẫu nhiên trong pw? ), nơi bộ phận hỗ trợ kỹ thuật có "cụm mật khẩu hợp lệ" cho mỗi ngày. Cụm mật khẩu có thể được cung cấp dưới dạng đầu vào bởi người dùng; hình ảnh của nó sẽ được so sánh với các giá trị được mã hóa cứng có liên quan đến ngày đó. Tuy nhiên, điều này không an toàn vì nhiều lý do:

(1) Các giá trị được mã hóa cứng

  • sẽ giống nhau cho tất cả người dùng, ví dụ: không thể chứa id người dùng
  • một khi cụm mật khẩu bị rò rỉ, bất kỳ ai có thể truy cập ứng dụng

(2) Ngày không thực sự tăng cường bảo mật, ngoại trừ việc kẻ thù sẽ phải biết rằng các ngày khác nhau có các cụm mật khẩu khác nhau.

Nên tôi cũng cần đề nghị chống lại điều này.

Điểm:0
lá cờ cn

Cuối cùng, tôi đã không giải quyết vấn đề này bằng mã hóa đối xứng mà chỉ tạo một hàm băm trên máy chủ và một hàm băm trên máy khách rồi so sánh chúng. Băm chỉ là một int 32 bit, vì vậy nó đủ dễ đọc qua điện thoại. Tôi sử dụng một khóa và ngày trong hàm băm, vì vậy nó khác nhau mỗi ngày.

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