Chính xác thì chuyển đổi bối cảnh tự nguyện là gì?


34

Tôi có một tệp nhị phân và tôi phải bẻ khóa mật khẩu của nó (bài tập về nhà). Ngoài ra còn có một chức năng được đưa ra (một chức năng là một phần của tệp nhị phân). Hàm đó cho thấy chuỗi đầu vào được so sánh với ký tự mật khẩu chính xác theo ký tự và trả về sai ngay lập tức khi ký tự sai (đó là cách làm không an toàn tôi đoán vì nó bị rò rỉ thời gian và chúng tôi có ý tưởng về độ dài mật khẩu chính xác như thí dụ). Nhưng giáo viên của chúng tôi đã thêm một bộ đếm thời gian ngẫu nhiên trả về kết quả (Đúng / Sai) để làm cho chúng tôi khó khăn hơn một chút ...

Dù sao, tôi đã thực hiện thành công với kỹ thuật đảo ngược và có mật khẩu chính xác. Bây giờ tôi đang chơi với nó trong dòng lệnh:

/usr/bin/time -v ./program_name enter_password

Với lệnh này, tôi nhận được rất nhiều thông tin như thời gian hệ thống, giao dịch hoán đổi, thời gian thực hiện..Nhưng điều thú vị nhất đối với tôi là "Chuyển đổi ngữ cảnh tự nguyện" bởi vì các ký tự chính xác hơn của mật khẩu tôi nhập, càng ít "Chuyển đổi ngữ cảnh tự nguyện " Tôi có!

Càng nhập nhiều ký tự sai, tôi càng nhận được nhiều "chuyển đổi bối cảnh tự nguyện".

Tôi đã mất gần hai giờ để bẻ khóa mật khẩu chỉ bằng cách nhập lệnh đó, nhập các ký tự và quan sát "Công tắc bối cảnh tự nguyện". Bất cứ khi nào MỘT ký tự chính xác, "Công tắc bối cảnh tự nguyện" giảm đi một.

Câu hỏi của tôi, chính xác là "Công tắc bối cảnh tự nguyện" là gì và tại sao họ lại giúp tôi bẻ khóa mật khẩu?


5
Chúc mừng bạn đã khám phá ra cho mình lĩnh vực phong phú và vẫn chưa được hiểu đầy đủ về các cuộc tấn công kênh bên .
zwol

1
@zwol Ý của bạn là "giàu" là gì? Và bên cạnh đó, chúng tôi hiện đang xử lý các cuộc tấn công kênh bên trong lớp, xin lỗi rằng tôi không "hiểu đầy đủ" lĩnh vực của nó một cách nhanh chóng ....
cnmesr

15
@cnmesr Tôi coi đó là một nhận xét chân thành, không phải là một lời mỉa mai, nói rằng zwol coi lĩnh vực này là một điều thú vị vì những khám phá mới vẫn đang được thực hiện. Không phải là bạn chưa hiểu hết về nó, mà là không ai hiểu hết về nó, và đó là điều làm cho nó thú vị.
hvd

3
@hvd cnmesr Vâng, đó là những gì tôi muốn nói.
zwol

@zwol ơi xin lỗi rồi! Tôi đã hiểu sai ý bạn và coi đó là một cuộc tấn công: p
cnmesr

Câu trả lời:


36

Các trang người đàn ông chotime giải thích các khái niệm thiết bị chuyển mạch bối cảnh tự nguyện và không tự nguyện:

The resource specifiers [...] are:
   c      Number of times the process was context-switched involuntarily
          (because the time slice expired).
   w      Number of times that the program was context-switched voluntarily, 
          for instance while waiting for an I/O operation to complete.

(trích dẫn từ hệ thống Debian của tôi, trang man được liên kết có một văn bản hơi khác)

Đó là, một chuyển đổi ngữ cảnh là tự nguyện, nếu quá trình rời khỏi CPU bởi vì nó không có gì khác để làm (trong khi chờ đợi một cái gì đó bên ngoài xảy ra). Không tự nguyện, nếu muốn tiếp tục một số tính toán, nhưng HĐH quyết định đã đến lúc chuyển sang một quy trình khác.


Làm thế nào bất kỳ điều này có liên quan đến chương trình kiểm tra mật khẩu, phụ thuộc vào những gì chương trình thực sự làm.

Từ mã nguồn được liên kết trong các nhận xét, chúng tôi thấy rằng chương trình gọi usleep()một lần cho mỗi ký tự không khớp, tiếp tục vòng lặp so sánh trên ký tự tiếp theo sau đó. Ngủ là tự nguyện như mang lại CPU từng có, vì vậy các cuộc gọi này sẽ hiển thị dưới dạng chuyển đổi ngữ cảnh tự nguyện cho mỗi nhân vật không gia công.

Trên Linux, bạn cũng có thể thấy các cuộc gọi với strace.

Độ trễ cuối cùng đến từ một giấc ngủ ngẫu nhiên T * (rand() % 3), tức là 0, 1 hoặc 2 lần một hằng số. Đó là một mức độ chi tiết khá thô, do đó, có thể dễ dàng lấy trung bình bằng cách thực hiện nhiều lần thử với cùng một mật khẩu.


3
Đây là mã nguồn của chức năng tôi đã đề cập ở trên pastebin.com/iTzheD4u Cảm ơn bạn Tôi sẽ xem xét các cuộc gọi với strace và hy vọng có thêm thông tin. Giới thiệu về bộ hẹn giờ ngẫu nhiên: Nếu mật khẩu có độ dài sai, thời gian đầu ra là như nhau (rất rất nhanh) và bộ hẹn giờ ngẫu nhiên không được thực thi. Nếu độ dài mật khẩu là chính xác, đầu ra là ngẫu nhiên vì bộ định thời ngẫu nhiên được thực thi.
cnmesr

@cnmesr, oh, thật tuyệt vời!
ilkkachu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.