Przeczytają to tylko uczestnicy rozmowy

Cryptico to anonimowy komunikator na przeglądarkę, Androida i iPhone'a: bez numeru telefonu, bez e-maila, bez prawdziwego imienia. Każda wiadomość jest szyfrowana end-to-end, a kod serwera nie potrafi rozszyfrować żadnej, nawet gdybyśmy tego chcieli.

Bez rejestracji i bez numeru telefonu — otwiera się wprost w przeglądarce.

Klient webowy w szerokim oknie przeglądarki: po lewej lista czatów, po prawej otwarta rozmowa grupowa.

Konto to fraza, a nie osoba

Do rejestracji nie trzeba niczego. Cryptico tworzy losową tożsamość i dwunastowyrazową frazę odzyskiwania, a ta fraza jest kontem — z niej wyprowadzany jest każdy klucz. Nie ma numeru do zweryfikowania, adresu do potwierdzenia ani profilu, który cokolwiek z tego by z kimkolwiek powiązał. Nazwa użytkownika jest opcjonalna: warto ją wziąć, żeby dało się kogoś znaleźć, albo pominąć.

01

Cztery rzeczy, za którymi naprawdę stoimy

  • 01

    Serwer nie potrafi odczytać wiadomości

    To właściwość kompilacji, nie polityki. Binarium serwera w ogóle nie zawiera definicji treści wiadomości, więc nie ma w nim ścieżki kodu, która mogłaby ją odczytać. Kontrola w naszym potoku przerywa budowanie, gdyby to przestało być prawdą.

    check-proto-content-boundary.mjs
  • 02

    Żadnych identyfikatorów ze świata rzeczywistego, nigdy

    Żadnych numerów telefonu, adresów e-mail ani prawdziwych imion — ani w aplikacji, ani w bazie, ani w protokole. Automatyczna kontrola odrzuca każdą zmianę, która takie pole dodaje. Pole na numer telefonu raz trafiło do szkicu wizytówki kontaktu; zostało usunięte, a jego miejsce trwale wycofane.

    check-forbidden-columns.mjs
  • 03

    Signal Protocol z postkwantowym uzgadnianiem kluczy

    PQXDH przy nawiązaniu, Double Ratchet dla wiadomości, Sender Keys dla grup. Każda sesja dokłada postkwantową wymianę Kyber-1024 ponad klasyczną — nie opcjonalnie, lecz w każdym nawiązaniu — więc ruch nagrany dziś nie stanie się czytelny dla przyszłego komputera kwantowego. To, co następuje po nawiązaniu, jest kryptografią klasyczną i dlatego mówimy o postkwantowym uzgadnianiu kluczy, a nie o całej drodze wiadomości.

    libsignal · PQXDH · Kyber-1024
  • 04

    Połączenia, których nasze serwery nie mogą podsłuchać

    Połączenia jeden na jeden idą wprost między urządzeniami; żaden serwer nie dotyka mediów. Połączenia grupowe przechodzą przez nasz serwer mediów, ale każda klatka jest szyfrowana, zanim tam trafi, kluczem, którego ten serwer nigdy nie dostaje. Kontrola przy budowaniu trzyma klucze mediów całkowicie poza kodem serwera.

    check-call-media-key-boundary.mjs
02

Co naprawdę da się tu zrobić

Komunikator, a nie pokaz możliwości. Wszystko z tej listy jest w produkcie, na każdej platformie, na której ma to sens.

  • Czaty, które zachowują się jak czaty

    Tekst ze wzmiankami, odpowiedzi, edycje, usuwanie u wszystkich, reakcje, przekazywanie, zaznaczanie wielu wiadomości i prywatne zakładki. Potwierdzenia dostarczenia i przeczytania, wskaźnik pisania, wersje robocze, wyszukiwanie w jednym czacie i we wszystkich naraz. Ankiety, listy zadań, punkt na mapie i wizytówka kontaktu, gdy zwykły tekst nie wystarcza.

  • Grupy do 128 osób

    Utworzenie grupy, dodawanie i usuwanie osób, zaproszenie linkiem z terminem ważności i limitem użyć, wzmianka o jednej osobie albo o wszystkich. Serwer rozsyła wiadomości i nigdy nie poznaje nazwy grupy, jej opisu ani tego, po kim została nazwana.

  • Pliki, zdjęcia i głos

    Osiem rodzajów załączników po 100 MiB każdy — zdjęcie, wideo, wiadomość głosowa, wideonotatka, plik, GIF, naklejka, audio — wraz z albumami i ukrywaniem treści. Każdy plik jest zamykany na urządzeniu własnym jednorazowym kluczem i sprawdzany pod kątem manipulacji przed otwarciem.

  • Miniaplikacje wewnątrz komunikatora

    Katalog, instalacja jednym dotknięciem i izolowane środowisko uruchomieniowe, a do tego konsola dla twórców i przycisk anonimowego zgłoszenia. Aplikacja, której suma kontrolna nie zgadza się z manifestem, w ogóle się nie uruchomi.

  • Blokada, która naprawdę blokuje

    Wiadomość zablokowanego nadawcy nigdy nie dociera w rozmowie prywatnej, a on sam nigdy się nie dowiaduje, że nie dotarła. Blokada trwa 180 dni, a każda próba napisania ją przedłuża.

  • Do dziesięciu urządzeń na jednym koncie

    Podłączenie nowego urządzenia frazą, podgląd całej listy, odłączenie dowolnego z nich — także wtedy, gdy nie została już żadna działająca sesja. Kontakty, foldery, lista czatów, blokady i ustawienia przenoszą się zaszyfrowane. Archiwum wiadomości w większości nie; o tym jest w części „czego nie obiecujemy”.

03

Połączenia jeden na jeden i grupowe

Dźwięk i obraz, kamera przednia i tylna, do ośmiu kafelków wideo naraz, podniesiona ręka, udostępnianie ekranu, wskaźniki mikrofonu i kamery na każdym kafelku. Media domyślnie idą przez przekaźnik, więc druga strona nie widzi adresu.

Połączenie grupowe z czterema uczestnikami; jeden z nich ma podniesioną rękę.Połączenie grupowe na telefonie.
04

Foldery, przypięcia i ciche czaty

Foldery oparte na regułach, przypięte czaty, wyciszone czaty, widok wspólnych mediów i pasek połączenia, który mówi prawdę o stanie łącza. Wzmianka i tak przebije się przez wyciszony czat — to celowe.

Edytor folderu z regułami filtrowania, które decydują, jakie czaty do niego trafiają.Lista czatów na telefonie wraz z ekranem tworzenia nowej grupy.
05

Jak to naprawdę działa

Wersja skrócona, dla tych, którzy wolą sprawdzić niż zaufać.

Ustawienia prywatności: potwierdzenia przeczytania, PIN i czas automatycznej blokady.Ustawienia prywatności na telefonie: odblokowanie biometryczne, automatyczna blokada i numer bezpieczeństwa służący do weryfikacji kontaktu.
Nawiązanie sesji
PQXDH: Curve25519 plus klucz wstępny Kyber-1024, w każdej bez wyjątku sesji, więc uzgodnienie klucza jest odporne na atak kwantowy od pierwszej wiadomości.
Wiadomości
Double Ratchet: każda wiadomość przesuwa klucze do przodu, więc klucz zdobyty później nie otwiera tego, co było wcześniej.
Grupy
Sender Keys, do 128 uczestników. Serwer zna skład, bo musi rozesłać wiadomości; nazwy grupy nie zna.
Połączenia grupowe
Klatki są szyfrowane, zanim dotrą do naszego serwera mediów. Klucz tworzy urządzenie, które rozpoczyna połączenie, rozdaje go sam komunikator, a zmienia się on za każdym razem, gdy ktoś dołącza lub wychodzi.
Pliki i zdjęcia
AES-256-GCM ze świeżym kluczem do każdego pliku, niesionym wewnątrz zaszyfrowanej koperty, oraz kontrola SHA-256 przed jakimkolwiek odszyfrowaniem. Magazyn przechowuje bajty, których nie potrafi zinterpretować.
Na urządzeniu
Lokalna baza wiadomości jest szyfrowana w spoczynku — SQLCipher na Androidzie i iPhonie, AES-256-GCM w przeglądarce.
Fraza odzyskiwania
Dwanaście słów. Z nich wyprowadzany jest każdy klucz konta: BIP39, a potem Argon2id z 64 MiB pamięci i trzema przebiegami na każdą próbę — to właśnie czyni atak siłowy nieopłacalnym. Serwer nie przechowuje niczego, czym dałoby się to odwrócić.
Weryfikacja osoby
60-cyfrowy numer bezpieczeństwa dla każdej rozmowy i sześciocyfrowy kod pokazywany w trakcie połączenia, aby jedna strona odczytała go na głos. Kod połączenia liczony jest wyłącznie z tego jednego połączenia, więc za każdym razem jest inny.
Blokada aplikacji
Czterocyfrowy PIN opakowany w Argon2id i AES-256-GCM, pięć prób, biometria tam, gdzie urządzenie ją oferuje, oraz automatyczna blokada po bezczynności. PIN otwiera urządzenie, fraza jest właścicielem konta.
Ustawienia i kontakty
Synchronizowane jako szyfrogram pod kluczem wyprowadzonym z frazy odzyskiwania — nawet nazwa każdego rekordu jest skrótem na kluczu, a nie tekstem. Serwer przechowuje nieprzejrzyste bloby, a nie pola.
Biblioteki
Android i iPhone korzystają z oficjalnej biblioteki Signala. Signal nie publikuje jej żadnej wersji dla przeglądarek, więc silnik webowy kompilujemy sami ze źródeł Signala, przypiętych do dokładnej wersji — zmieniona jedna linia, żeby dało się to tu zbudować, i nic nietkniętego w samej kryptografii.
06

Czego nie obiecujemy

Strona główna każdego komunikatora mówi, co chroni. Ta mówi też, czego nie chroni, bo to, czego nie da się naprawić, trzeba wiedzieć najbardziej.

  • Widzimy, kto z kim rozmawia

    Szyfrowanie end-to-end ukrywa treść, a nie sam fakt rozmowy. Żeby dostarczyć wiadomość, serwer musi wiedzieć, kto ją odbiera i kiedy. Przechowuje też skład grup, bo bez tego rozesłanie jest niemożliwe. Nie możemy uczciwie twierdzić, że nie wiemy, kto z kim rozmawia. Możemy twierdzić, że nigdy nie widzimy treści i że kod serwera nie potrafi jej nawet odczytać.

  • Powiadomienia push ujawniają czas firmom Google i Apple

    Powiadomienia na Androidzie idą przez Firebase Cloud Messaging, a na iPhonie przez usługę Apple. Push nie niesie ani tekstu, ani nadawcy — ale przewoźnik widzi, które urządzenie zostało wybudzone i o której godzinie, a to wystarczy, by przez zestawienie czasów odtworzyć, kto z kim rozmawia. Anonimowość konta nie obejmuje faktu i czasu komunikacji, dopóki budzikiem jest cudza usługa.

  • Historia ledwie podąża za użytkownikiem

    Zalogowanie się na nowym urządzeniu przywraca tożsamość, profil, kontakty, foldery, listę czatów, blokady i część ustawień — ale nie archiwum wiadomości. Rozmówcy przysyłają ponownie tylko płytki wycinek, nie głębszy niż trzydzieści dni, i to wszystko. Kopii historii po stronie serwera nie ma — tak to zaprojektowano.

  • Po utracie frazy nikt nie pomoże

    Wsparcie nie wpuści z powrotem, bo po naszej stronie nie ma czym wpuścić: żadnego numeru, adresu ani podpowiedzi do hasła. Dwanaście słów to całe konto. Taka jest cena wszystkiego innego na tej stronie i wolimy, żeby było to wiadome przed rejestracją, a nie po niej.

  • Prowadzimy dzienniki, tylko nie o użytkownikach

    Prowadzimy operacyjne dzienniki usługi, bez treści wiadomości, bez ciał szyfrogramów, bez kluczy i bez fraz odzyskiwania. „Zero dzienników” byłoby nieprawdą; „w dziennikach nie ma treści” jest prawdą i to właśnie obiecujemy.

07

Gdzie to działa

Rozmowa grupowa otwarta na telefonie.Połączenie grupowe na telefonie.Ekran zaproszenia na telefonie z kodem QR i kodem zaproszenia do przekazania.
08

Pytania, które naprawdę padają

Ile to kosztuje?

Nic. Nie ma płatnego wariantu, reklam ani dosprzedaży — ograniczenia są wyłącznie techniczne, jak 100 MiB na plik i trzydzieści dni jego przechowywania. Jeśli płatny wariant kiedyś się pojawi, powiemy o tym wcześniej, a nie po fakcie.

Czy kod jest jawny?

Jeszcze nie. Zostanie opublikowany, gdy rozwój się ustabilizuje. Do tego dnia nie nazywamy się projektem o otwartym kodzie źródłowym — takiego zapewnienia nie da się zweryfikować, a nie zamierzamy prosić o przyjęcie go na wiarę. Gdy repozytorium stanie się publiczne, jego adres będzie dokładnie tutaj.

Co się stanie, gdy zgubię frazę odzyskiwania?

Konto przepada. Nie ma linku resetującego ani sposobu, by wsparcie wpuściło kogoś z powrotem — droga odzyskiwania pod naszą kontrolą byłaby wejściem także dla kogoś obcego.

Kto może do mnie napisać?

Potrzebna jest nazwa użytkownika, przekazany przez kogoś link z zaproszeniem albo kod QR. Kto woli w ogóle nie być do znalezienia, po prostu nie bierze nazwy użytkownika. Zablokować można każdego, a zablokowany nadawca przestaje docierać.

Czy da się sprawdzić, że rozmawiam z właściwą osobą?

Tak, na dwa sposoby. Każda rozmowa ma 60-cyfrowy numer bezpieczeństwa, który obie strony mogą raz porównać, a w trakcie połączenia oba ekrany pokazują ten sam sześciocyfrowy kod — jedna osoba czyta go na głos, druga sprawdza. Kod połączenia jest nowy przy każdym połączeniu.

Czy można korzystać na więcej niż jednym urządzeniu?

Tak, na maksymalnie dziesięciu. Każde podłącza się frazą odzyskiwania, a dowolne można odłączyć z listy. Kontakty, foldery, lista czatów i ustawienia przenoszą się zaszyfrowane; archiwum wiadomości w większości nie.

Czy profilujecie użytkowników albo cokolwiek sprzedajecie?

Nie ma reklam ani sprzedaży danych. Ta strona nie zawiera żadnej analityki ani skryptów zewnętrznych — ani jedno żądanie nie wychodzi na cudzy serwer.

Powiadomcie mnie, gdy będzie gotowe

Jedna wiadomość, w dniu, w którym pojawi się coś wartego instalacji. Bez newslettera, bez cyklu wiadomości i bez zewnętrznej usługi pocztowej — adres zostaje w naszej własnej bazie i nigdzie dalej nie trafia.

Nie wysyłamy potwierdzenia, więc literówka oznacza ciszę. Warto sprawdzić adres przed wysłaniem.