W kryptografii klucza publicznego odcisk palca klucza publicznego to krótka sekwencja bajtów używana do identyfikacji dłuższego klucza publicznego.
W szczególności w SSH można ich użyć do sprawdzenia, czy serwer jest w rzeczywistości serwerem, z którym mam się komunikować i że nie jestem atakowany przez man-in-the-middle.
Zazwyczaj są one przedstawiane jako ciąg cyfr szesnastkowych, więc porównywanie go z odciskiem palca, którego bym się spodziewał, może być nudne i żmudne:
37:e4:6a:2d:48:38:1a:0a:f3:72:6d:d9:17:6b:bd:5e
Aby to trochę ułatwić, OpenSSH wprowadził metodę wizualizacji odcisków palców jako sztuki ASCII, która wyglądałaby następująco:
+-----------------+
| |
| |
| . |
| . o |
|o . o . S + |
|.+ + = . B . |
|o + + o B o E |
| o . + . o |
| .o |
+-----------------+
Dzięki temu mogłem spróbować zapamiętać szorstki kształt sztuki ASCII, a następnie (teoretycznie) rozpoznać ją, gdy zmienił się odcisk palca serwera i obraz wygląda inaczej.
Jak to działa
Zaczerpnięte z Dirk Loss, Tobias Limmer, Alexander von Gernler. 2009. Pijany biskup: Analiza algorytmu wizualizacji odcisków palców OpenSSH .
Siatka ma szerokość 17 znaków i wysokość 9 znaków. „Biskup” zaczyna się w rzędzie 4 / kolumnie 8 (środek). Każda pozycja może być oznaczona jako [x, y], tj. [8,4] dla pozycji początkowej biskupa.
1111111
01234567890123456
+-----------------+
0| |
1| |
2| |
3| |
4| S |
5| |
6| |
7| |
8| |
+-----------------+
Biskup używa odcisku palca, aby się poruszać. Odczytuje bajty od lewej do prawej i od najmniej znaczącego do najbardziej znaczącego:
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
Biskup wykona następujący plan:
Bits Direction
-----------------
00 Up/Left
01 Up/Right
10 Down/Left
11 Down/Right
Przypadki specjalne:
- Jeśli biskup znajduje się w kącie i ponownie się w nie ruszy, w ogóle się nie rusza. tj .: Biskup jest w,
[0,0]
a jego następnym krokiem będzie00
. On pozostaje w[0,0]
- Jeśli biskup jest w rogu lub pod ścianą i porusza się do jednej ze ścian, porusza się tylko poziomo lub pionowo. tj .: Biskup jest w,
[0,5]
a jego następnym krokiem będzie01
. Nie może iść w lewo, więc po prostu przesuwa się w górę, do[0,4]
.
Każda pozycja zawiera wartość tego, jak często biskup odwiedzał to pole:
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 |
Wartości 15 (S) i 16 (E) są wyjątkowe, ponieważ oznaczają odpowiednio pozycję początkową i końcową biskupa i zastępują rzeczywistą wartość pozycji szacunku.
Cel
Utwórz program, który pobiera alfanumeryczny odcisk palca jako dane wejściowe i tworzy reprezentację graficzną ASCII, jak pokazano w przykładach.
Przykłady
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 |
| |
| |
| |
+-----------------+
Zasady
- To jest golf golfowy . Kod w najmniejszej liczbie bajtów wygrywa.
- Można nie korzystać z istniejącej biblioteki, która wytwarza obraz.
- Używaj dowolnego preferowanego języka!
- Twoje zgłoszenie musi być kompletnym programem
33:33:33:...:33
, cc:cc:cc:...:cc
byłyby tego przykłady. Odcisk palca jest zwykle skrótem MD5, więc bardzo mało prawdopodobne jest uzyskanie takiego wyniku. Nie znalazłem żadnych wiarygodnych źródeł, jak sobie z nimi radzić, więc na razie powiem: Załóżmy, że żadna komórka nie będzie odwiedzana więcej niż 14 razy.