Problemem internetu jest to, że… jest zbyt tani
Temat brzmi dość absurdalnie. Ktoś złośliwy dla ekipy rządzącej pewnie zasugerowałby, że to kolejny pomysł ministra gospodarki. Jednak w tym zaskakującym stwierdzeniu nie kryje się wcale sposób zwiększenia wpływów do budżetu państwa, lecz możliwość rozwiązania wielu problemów światowej sieci. Problemy te związane są z sieciowym bałaganem, który zostawiają po sobie wszelkie boty, a którego symbolem stał się spam. Autorowi wcale nie chodzi o zwiększenie opłaty abonamentowej, która spowodowałaby, że Internet stałby się mniej powszechny. Wysłanie wiadomości mailowej jest dziś w praktyce bezkosztowe, płacimy tylko ryczałt za dostęp do Internetu. Zanim nadeszła era globalnej wioski, różnica w koszcie wysłania jednej, a tysiąca tradycyjnej wiadomości była olbrzymia. Koszt znaczka pocztowego i koperty był dowodem na to, że przy wysłaniu listu ponieśliśmy jakiś trud (w tym przypadku finansowy). Dziś wysłanie większej ilości wiadomości drogą elektroniczną nie stanowi żadnej różnicy w stosunku do wysłania pojedynczego egzemplarza. Czy to jest właśnie jedna z przyczyn tworzenia się śmietnika w globalnej pajęczynie?
Myślisz pewnie, że zaraz zasugeruję, że należałoby opodatkować wysyłanie wiadomości. Oj nie! Wystarczy abyśmy za każdym razem przy wysyłaniu wiadomości musieli udowodnić, że poświęciliśmy temu działaniu jakiś wysiłek. Wysiłek większy niż użycie metody copy&paste, dzięki której wysłalibyśmy maila w ciągu sekundy. Ściślej rzecz ujmując komputer musi udowodnić, że wykonał jakąś trudną pracę (trwającą dłuższą chwilę – ściślej wykonaną w czasie wykładniczym od rozmiaru danych) przy tej całej operacji. Do wiadomości załączana jest pieczęć, która jest „dowodem pracy”. Następnie odbiorca naszej wiadomości mając ten dowód pracy sprawdza szybko (błyskawicznie – ściślej w czasie wielomianowym), czy dowód jest poprawny. Jeżeli tak jest nasza wiadomość staje się wiarygodna. W przeciwnym przypadku mamy dość duże prawdopodobieństwo, że padliśmy ofiarą spamu.
Prekursorami dowodów pracy są autorzy publikacji „On Memory-Bound Functions for Fighting Spam” , czyli Dwork, Naor i Goldberg (1992). Ważnym praktycznym osiągnięciem w tej dziedzinie jest hashcash wykorzystywany między innymi przez serwis BitCoin służący do anonimowego transferu pieniądza. Hashcash jest swego rodzaju elektronicznym znaczkiem pocztowym. Generowanie dowodu tego typu (nie skupiam się tutaj na standardzie, ale ilustracji metody tego typu) polega na tym, że musimy znaleźć taką liczbę k, dla której hash na pierwszych N najbardziej znaczących bitach będzie zawierał same zera. Skrót generowany jest z wejścia, które jest złączeniem treści wiadomości, jej odbiorcy, czasu wysłania i wylosowanej liczby, którą dołączamy jako dowód. Taką wartość k znajdujemy w średniej liczbie prób 2^(N-1). Skąd się bierze taka liczba prób? Korzystamy z jednej z własności funkcji hashującej, czyli jej pseudolosowości. Zgodnie z nią hash ma przypominać wylosowaną wartość. W naszym przypadku używamy jednostronnej funkcji hashującej SHA-1 (funkcja 160 bitowa).
Przykład. Załóżmy, że N określiliśmy jako 40 najbardziej znaczących bitów. Nasza funkcja hashująca wygląda następująco SHA-1(message + recipient + time + k). Dla wiadomości „Testowa”, odbiorcy „imie.nazwisko@gmail.com” i daty „2013-07-26 00:00” losujemy wartość k, dla której 40 najbardziej znaczących bitów będzie wyzerowanych.
Jedną z takich wartości k jest 1053786903041250420403443923384887918684823022029. Wysyłamy wiadomość o podanych parametrach załączając taki dowód liczbowy. Przy policzeniu SHA-1 otrzymujemy „000008682c554f02a7f4ebc8d7acdb3adb8ef735”. Pierwsze 5 znaków liczby szesnastkowej hasha ma wartość 0, a więc wiemy, że pierwsze 20 bitów w rzeczywistości są bitami 0, więc k jest prawidłowe.
Bardzo prostą implementację tego „pseudo hashcasha”, którą wykonałem na potrzeby tego wpisu, możesz znaleźć tutaj. Dla przyśpieszenia generowania dowodu w interpreterze Pythona zamiast N najbardziej znaczących bitów wykorzystałem N najbardziej znaczących bajtów. Jeżeli to wprowadzenie do tematu „dowodów pracy” sprawiło, że poczułeś się zainteresowany tym zagadnieniem poniżej znajdziesz kilka ciekawych odniesień. Czy uważasz, że wysyłanie wiadomości powinno stać się bardziej kosztowne?
Ciekawe odniesienia:
Pomysł bardzo dobry, niestety niespecjalnie skalowalny. Wysyłając wiadomość na listę zawierającą dużo adresów (ale inną niż spamlista, na przykład manager do swoich podwładnych w dużej firmie), nadal trzeba by wygenerować ogromną ilość hashy. To może kosztować za dużo. Tak że pomysł ogólnie dobry, ale nie do bezmózgiego stosowania wszędzie. Widziałbym go raczej jako część protokołu poczty, która stosowałaby hashcash jako jeden (nieobowiazkowy) z etapów weryfikowania nadawcy, a nie panaceum na wszelkie bolączki 🙂 Ale ja to jestem laikiem, pewnie taki protokół dawno istnieje 😀
Masz rację. Poza tym to wymagałoby opracowania jednego nowego spójnego protokołu, który albo musiałby dotyczyć każdego odbiorcy i nadawcy (bałagan i obecnie trud, część wiadomości prawidłowych by była z automatu odrzucana, bo ktoś nie miałby tego wdrożonego), albo każdego serwera pocztowego tychże. Pomysł jednak wykorzystuje SpamAssassin. Rozwiązaniem przedstawionego problemu mogłoby być wykorzystanie hashcasha obok innych mechanizmów w przypadku, gdy korespondencja z danym osobnikiem jest częstsza i jest on osobą o wysokim priorytecie należy opierać się na samych białych i czarnych listach. Wielokrotnie to jest wspomniane w publikacjach dotyczących tego problemu, m.in. w publikacji naszych prowadzących, którą wrzuciłem w "ciekawe odniesienia".
Zobacz, że ten model najprościej wdrożyć na jakimś forum, czy w komentarzach jakiegoś serwisu webowego. Zaleta? Pozbywamy się CAPTCHA. Tutaj dobrym i naturalnym narzędziem jest JS, czy nawet AJAX.