Trong mật mã khóa công khai, dấu vân tay khóa công khai là một chuỗi byte ngắn được sử dụng để xác định khóa công khai dài hơn.
Đặc biệt, trong SSH, chúng có thể được sử dụng để xác minh rằng máy chủ thực tế là máy chủ mà tôi muốn liên lạc và tôi không bị tấn công bởi một cuộc tấn công trung gian.
Chúng thường được biểu diễn dưới dạng một chuỗi các chữ số thập lục phân, do đó có thể khá nhàm chán và tẻ nhạt khi so sánh nó với dấu vân tay mà tôi mong đợi:
37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e
Để làm cho nó dễ dàng hơn một chút, OpenSSH đã giới thiệu một phương pháp trực quan hóa dấu vân tay như nghệ thuật ASCII, trông giống như sau:
+-----------------+
| |
| |
| . |
| . o |
|o . o . S + |
|.+ + = . B . |
|o + + o B o E |
| o . + . o |
| .o |
+-----------------+
Với điều này, tôi có thể cố gắng nhớ hình dạng thô của nghệ thuật ASCII và sau đó (về mặt lý thuyết) sẽ nhận ra nó khi dấu vân tay của máy chủ thay đổi và hình ảnh trông khác nhau.
Làm thế nào nó hoạt động
Lưới có chiều rộng 17 ký tự và chiều cao 9 ký tự. "Giám mục" bắt đầu ở hàng 4 / cột 8 (giữa). Mỗi vị trí có thể được ký hiệu là [x, y], tức là [8.4] cho vị trí bắt đầu của giám mục.
1111111
01234567890123456
+-----------------+
0| |
1| |
2| |
3| |
4| S |
5| |
6| |
7| |
8| |
+-----------------+
Giám mục sử dụng dấu vân tay để di chuyển xung quanh. Nó đọc nó theo từng byte từ trái sang phải và từ bit quan trọng nhất đến bit quan trọng nhất:
Fingerprint 37 : e4 : 6a : ... : 5e
Bits 00 11 01 11 : 11 10 01 00 : 01 10 10 10 : ... : 01 01 11 10
| | | | | | | | | | | | | | | |
Step 4 3 2 1 8 7 6 5 12 11 10 9 64 63 62 61
Giám mục sẽ di chuyển theo kế hoạch sau:
Bits Direction
-----------------
00 Up/Left
01 Up/Right
10 Down/Left
11 Down/Right
Trường hợp đặc biệt:
- Nếu giám mục ở trong một góc và sẽ di chuyển vào góc một lần nữa, anh ta sẽ không di chuyển chút nào. tức là: Giám mục đang ở
[0,0]
và bước tiếp theo của ông sẽ là00
. Anh ấy vẫn ở[0,0]
- Nếu giám mục ở trong một góc hoặc tại một bức tường và sẽ di chuyển vào một trong những bức tường, anh ta chỉ di chuyển theo chiều ngang hoặc chiều dọc. tức là: Giám mục đang ở
[0,5]
và bước tiếp theo của ông sẽ là01
. Anh ta không thể đi bên trái, vì vậy anh ta chỉ cần di chuyển lên[0,4]
.
Mỗi vị trí giữ một giá trị về tần suất mà giám mục đã đến thăm lĩnh vực này:
Value | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13| 14| 15| 16|
Character | | . | o | + | = | * | B | O | X | @ | % | & | # | / | ^ | S | E |
Các giá trị 15 (S) và 16 (E) đặc biệt ở chỗ chúng đánh dấu vị trí bắt đầu và kết thúc của giám mục tương ứng và ghi đè lên giá trị thực của vị trí tôn trọng.
Mục tiêu
Tạo một chương trình, lấy dấu vân tay chữ và số làm đầu vào và tạo ra biểu diễn nghệ thuật ASCII của nó như trong các ví dụ.
Ví dụ
Input:
16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
Output:
+-----------------+
| . |
| + . |
| . B . |
| o * + |
| X * S |
| + O o . . |
| . E . o |
| . . o |
| . . |
+-----------------+
Input:
b6:dd:b7:1f:bc:25:31:d3:12:f4:92:1c:0b:93:5f:4b
Output:
+-----------------+
| o.o |
| .= E.|
| .B.o|
| .= |
| S = .|
| . o . .= |
| . . . oo.|
| . o+|
| .o.|
+-----------------+
Input:
05:1e:1e:c1:ac:b9:d1:1c:6a:60:ce:0f:77:6c:78:47
Output:
+-----------------+
| o=. |
| o o++E |
| + . Ooo. |
| + O B.. |
| = *S. |
| o |
| |
| |
| |
+-----------------+
Quy tắc
- Đây là mã golf . Mã trong ít byte nhất sẽ thắng.
- Bạn không thể sử dụng một thư viện hiện có tạo ra hình ảnh.
- Sử dụng ngôn ngữ nào bạn thích!
- Trình của bạn phải là một chương trình hoàn chỉnh
33:33:33:...:33
, cc:cc:cc:...:cc
sẽ là ví dụ cho điều này. Dấu vân tay thường là hàm băm MD5, do đó rất khó có khả năng bạn nhận được kết quả như vậy. Tôi chưa tìm thấy bất kỳ nguồn đáng tin cậy nào về cách đối phó với những điều này, vì vậy bây giờ tôi nói: Giả sử không có tế bào nào sẽ được truy cập hơn 14 lần.