Шифруем сообщения до заданного времени
Представляю на ваш суд сей небольшой сервис — TellYouLater.com. Сервису всего несколько месяцев, но он уже умеет так зашифровать сообщение, что никто не сможет его прочитать до заданного момента времени. Собственно, только это сервис и умеет.
Вот пример саморасшифровывающегося сообщения: http://goo.gl/YdIzI (QR рядом это оно же).
Алгоритмы
Эта область криптографии на английском называется Time-Lapse Cryptography и настолько современна, что еще даже не обзавелась страницей в Википедии.
Сервис использует простейшую схему Time-Lapse Cryptography: на каждый час в ближайшие несколько лет создана пара ключей — открытый и секретный. Все открытые ключи доступны, а секретные ключи публикуются только в соответствующий момент времени.
Обязанность сервера только публиковать секретные и открытые ключи, а шифрование/дешифрование выполняется на стороне клиента (конечно это JavaScript). То есть в сеть сообщение без ведома пользователя не попадет.
Реализация 1024-битного RSA и 128-битного AES на JavaScript неплохо оптимизирована (в том числе спасибо и Google Closure Compiler) и на большинстве устройств выполняется мгновенно. Пришлось, правда, повозиться с IE, который предлагал пользователю прервать скрипт (хотя работал скрипт меньше секунды).
Инфраструктура
Вебсервер любезно предоставлен молодым, но подающим надежды провайдером, со смешным названием Гуугль.
На самом вебсайте не хранятся секретные ключи, сайт запрашивает их из промежуточного хранилища где-то в интернете. Хранят секретные ключи совсем другие сервера (каждый сервер знает только свою часть ключа), они и публикуют их в заданное время в этом самом хранилище.
Ключи сгенерированы программой OpenPGP.
Заключение
Область применения этого сервиса обширна — от… ну я не знаю, до… надо подумать.
В общем, пользуйтесь на здоровье.
P.S. Уточняю — исходные и зашифрованные сообщения на сервер не передаются, не хранятся и не распространяются. Что делать с зашифрованным сообщением решает сам пользователь. Сервер обрабатывает только запросы «Дай секретный/открытый ключ на такой-то час». Остальное — JavaScript на клиенте.