FortNotes FluxBB Forum

FortNotes is a highly secure online password manager.

You are not logged in.

#1 System updates » 2012.12.09 - Google+ community created » 2012-12-09 15:12:47

admin
Replies: 0

Welcome smile
There are 400 users already. Good number smile
Please feel free to join the community and share your ideas and wishes.

#3 System updates » 2012.09.20 - backup/export and local mode » 2012-09-20 18:35:15

admin
Replies: 0

Initial backups support added. Only creation for now. Restoring will be later.
Also it's now possible to dump all the data as plain text. All fields data with tag list. No history and no deleted notes. Requires password reentering.
In future it's possible to configure the output i.e. JSON/XML format, note entries history enable/disable and so on.
The new big thing - local mode using php built-in web server with sqlite database. Very quick deployment and rather high speed. Will add install instructions shortly.

#4 Re: Problems and solutions » Changing a password » 2012-06-09 19:49:30

I agree that password changing is rather important but at the moment is not implemented. It's not a trivial process as requires loading all the encrypted records to the client browser, recrypt and then send them back to the server. The main problem is that user in the middle of the process can close the page (terminate the browser, lost connection and so on) so the user data may become inconsistent.

#6 Re: Installation instructions » General information » 2012-05-14 09:06:03

robo-pet wrote:

А можно более детально описать процесс установки ? Попытался установить у себя, на Debian + lighttpd, изменил скрипты init на debian окружение, запустил вебсервер, запустил инит скрипт, и после входа на страницу проекта - получаю "Controller /fortnotes/application/controllers/fortnotes.php does not exist!"

Обновил инструкцию. Вероятно дело в том что в хостах не прописан домен.
Если опять будут проблемы, пишите - разберемся.

#7 Re: System description » General information (russian) » 2012-05-11 13:09:41

Добрый день.
Спасибо за положительный отзыв - это редкость smile

tmp32 wrote:

Очень не хватает загрузки файлов. Пока что использую для хранения не особо критичных рабочих данных(точки доступа, внутресетевые сервисы и тд), при возможности загрузки файлов - можно было бы прицеплять к созданным записям - конфиги от железок.  Спасибо за потраченное время, на написания данной софтины.

Работа с файлами изначально планировалась, но все упирается в ограничения браузера по доступу к файлам на винте. Я не могу с ними работать из JavaScript. Возможно поможет флеш. Смутно припоминаю какие-то новые html5 стандарты, которые вроде такое могут позволять. В общем, надо разбираться. Можно конечно просто файлы постить на сервер и там как-то шифровать, но это уже будет потенциальная брешь в безопасности, мне бы так очень не хотелось.

#8 Re: System description » General information (russian) » 2012-05-06 13:20:49

Рутокен имеет другой уклон.
А вот файлы да, было бы хорошо загружать и шифровать. При появлении возможности такой функционал будет добавлен.

#9 System updates » 2012.04.24 - detailed article (russian) » 2012-04-25 12:04:55

admin
Replies: 0

Опубликована подробная статья на Хабре с техническими деталями.

#10 System description » General information (russian) » 2012-04-23 18:48:59

admin
Replies: 4

Все, кто пользуется интернетом длительное время, наверняка накопили большое количество различных приватных данных, таких как логины и пароли от сайтов, почтовых ящиков, серверов и баз данных. У кого-то меньше, у кого-то больше, но такие данные есть у всех. Можно хранить это на клочках бумаги, стикерах на мониторе, в блокноте на тумбочке или в файле на рабочем столе. Многие догадываются что это не очень безопасно: кто-то может подсмотреть или банально можно потерять эти драгоценные данные, но обычно редко кто пытается что-то с этим сделать.
Интернет очень плотно вошел в нашу жизнь и было бы неплохо иметь возможность упорядочить и обезопасить свои данные. Даже если не хранить в банках миллионы и не переживать, что кто-то украдет пароль от банковского счета, - это не значит, что будет приятна утеря доступа к почте, wm-киперу или фейсбуку. Личная переписка, деловые контакты, фотографии, секретная информация разного вида - всё это не должно быть доступно никому, кроме владельца.

Общее описание системы

FortNotes - это Форт Нокс для пользовательских данных. Технология в основе этого проекта - BlackBox, чёрный ящик или зашифрованный контейнер. Все записи, создаваемые на этом сайте, немедленно шифруются прямо в браузере с помощью AES (симметричный алгоритм блочного шифрования, принятый в качестве стандарта шифрования правительством США) и только после этого отправляются на сервер уже в зашифрованном виде. Это означает, что никто, кроме владельца данных, не имеет к ним доступа. Ни перехват данных интернет-соединения, ни изучение зашифрованного контейнера излишне любопытной администрацей сайта не позволят получить доступ к исходным данным. Без пользовательского пароля это будет просто бессмысленная мешанина символов. Чёрный ящик расшифровывается в реальную информацию только при входе на сайт FortNotes и вводе пароля. Таким образом пользователи не доверяют хранение своих секретных данных непонятно кому: сервер FortNotes хранит только зашифрованные чёрные ящики и ничего более, никакой информации в открытом виде. Дальше пользовательского компьютера и браузера не уходит даже логин, под которым проходит регистрация в системе. Абсолютно всё шифруется перед отправкой на сервер. Когда нужны данные - шлётся запрос, закачивается крипто-контейнер и происходит расшифровка. Процесс автоматизирован и прозрачен: требуется только предварительный ввод пароля.

Going deeper

Регистрация

Для регистрации в системе требуется только логин и пароль, которые перед отправкой на сервер преобразовываются в sha256-хеш, что по сути делает регистрацию анонимной. Вместо имен пользователей и их паролей в базе хранятся символьные последовательности вида "a9dc602f9d82bc6720b2b4bb016edcacf7da4b2b453a466b742da743f3cba15d". На сервере не хранятся никакие данные, которые могли бы идентифицировать пользователей. По этой же причине не запрашивается e-mail пользователя, так что восстановление логина и пароля невозможно. Высокий уровень безопасности накладывает определенные требования: нет никаких бекдоров, никаких "восстановлений забытых паролей". Это означает, что утеря этого пароля равнозначна утере всей базы секретных пользовательских данных. Модальное окно регистрации настойчиво акцентирует на этом внимание:

0_8505d_da16ccb9_orig

Для верификации регистрации используется капча:

0_8505e_519a4657_orig

После успешной регистрации происходит редирект в пользовательскую секцию. При каждом входе в эту закрытую секцию запрашивается пароль, который необходим для всех операций шифрования и расшифровки данных. Пароль хранится в оперативной памяти ограниченное (настраиваемое) время, по истечении которого очищается и вновь запрашивается у пользователя:

0_8505f_6a3591da_orig

Перед очисткой пароля (после истечения времени его хранения), все данные, которые еще не были сохранены, шифруются и временно сохраняются в браузере без отправления на сервер. После того, как пользователь введет свой пароль, эти данные будут восстановлены, и пользователь сможет продолжить работу.

В правом верхнем углу экрана доступны две команды:

  • Lock позволяет немедленно зашифровать все открытые данные, стереть из памяти пароль и заблокировать экран до тех пор, пока не будет введен пароль. Важно помнить, что если в этот момент редактировались какие-либо данные заметки и они не были сохранены, то при данной блокировке эти изменения так и останутся только в браузере и не попадут на сервер, пока пользователь явно не сохранит заметку.

  • Exit выполняет полный выход из системы с очисткой пароля из памяти, удалением всех пользовательских кешей и сессии на сервере, после чего перенаправляет на домашнюю страницу проекта.

Создание и редактирование заметок

Основная единица информации в системе это note - заметка. Заметки могут быть разных типов. Для создания заметок имеется с десяток основных типов, оформленных в виде шаблонов. С их помощью в один клик можно получить заметку типа "почтовый ящик", "сайт", "jabber аккаунт", "ssh/ftp сервер" и т.д. Типы не статичны, но об этом чуть позже. Список типовых шаблонов для заметок:

0_84c73_e41abc56_orig

Каждая заметка состоит из набора полей (entry), которые представляют из себя конечные поля ввода информации, и списка тегов, разделенных пробелом. Так, например, заметка типа "skype" состоит из трех полей: skype name (имя скайп-аккаунта), password (пароль), comments (необязательное поле комментариев) и выглядит следующим образом:

0_84c74_bb999489_orig

Поля, в свою очередь, тоже делятся по типам: простой однострочный текст, e-mail, URI (для адресов типа сайтов), пароль, многострочный текст, html.
Деление по типам для полей позволяет добавлять различные вспомогательные операции: например, для поля типа "пароль" становится доступной функция генерации случайного пароля заданной длины, для поля адреса при вводе URL производится попытка получить описание сайта и иконки для дальнейшего использования.

Как уже было упомянуто выше, поля в заметках не статичны. В заметке типа "скайп" можно в любой момент добавить новое поле любого типа (например, e-mail) и спозиционировать его в желаемом месте, можно удалить любое уже существующее поле (восстановить удаленное), переместить выше или ниже, поменять тип или просто отредактировать текст поля и заголовок.
При наведении курсора мыши на какое-либо поле, всплывают дополнительные элементы управления:

0_84c7c_e7f3611c_orig

Тип любого поля может быть изменен в любой момент с помощью соответствующего пункта. Текст заголовка (если он был изменен) и данные при этом сохраняются.

0_850ee_bf8ee8d5_orig

Отдельно стоит отметить просмотр истории изменений каждого поля с возможностью откатиться к ранее сохраненным значениям. Восстанавливаются и данные поля и заголовок. При выборе соответствующего пункта во всплывающем меню появляется таблица с десятью последними значениями истории и ссылкой для восстановления:

0_84c6e_5813d727_orig

При изменении заголовка или данных уже существующей заметки модифицированные данные подсвечиваются:

0_850ad_4458ce46_orig

После внесения изменений при сохранении заметки, визуально отображается какие поля были добавлены, а какие обновлены (плюс - новое поле, галочка - обновленное):

0_84c97_70a9add4_orig

При редактировании заметки возможно выполнить быстрое сохранение с помощью комбинации клавиш Ctrl + Enter.
Помимо сохранения доступны две специальные команды - дублирование текущей заметки и создание новой заметки аналогичной текущей, но с пустыми полями. Это будет удобно при создании серии однотипных заметок.

Поиск и фильтрация

Поиск на серверной стороне осуществляется с помощью тегов, перечисленных через пробел в строке поиска. Использование в поиске тега со знаком минус перед ним выводит список заметок, где такой тег не встречается. Помимо пользовательских тегов, создаваемых при добавлении заметок, есть набор системных тегов для получения списка удаленных заметок, заметок без тегов или фильтрации по времени последнего доступа. Такие теги доступны в строке поиска после ввода символа двоеточия ":". В примере ниже показан результат поиска записей за последний месяц, где встречаются теги site, work и dev, но не встречается тег php:

0_850d5_b5bedef1_orig

Результирующий список отображает все удовлетворяющие условиям заметки, где каждая строка соответствует одной заметке с кратким указанием содержимого полей, датой последних изменений и полным списком тегов. При щелчке мышью на теге можно добавить его в условия поиска или убрать его из поиска, если он там уже был. При одновременно зажатой клавише Ctrl можно добавить в поиск выбранный тег со знаком минус.

Поле поиска поддерживает интеллектуальное автодополнение. Достаточно начать вводить имя тега и сразу же будет отображен список возможных вариантов с учетом уже введенных тегов. Т.е. отображаются лишь те теги, которые встречаются в паре с уже указанными.

0_8524a_7ae22b98_orig

Поиск по тегам возвращает первые 20 заметок. При необходимости получить полный список, можно воспользоваться соответствующей ссылкой load all. Там же присутствуют ссылки для выделения всех заметок, снятия выделения и инвертирования. Для того чтобы начать работу с заметкой, достаточно щёлкнуть по ней мышью, после чего строка будет отмечена галочкой и подсвечена зеленым цветом, а заметка будет открыта в режиме редактирования. Также возможно отметить галочкой одну и более заметок, щёлкнув по нужной строке с зажатой клавишей Ctrl. Аналогично работе в файловых менеджерах работает выделение заметок при нажатой клавише Shift - выделяет все элементы между двух щелчков мышью. Над выделенными галочками заметками можно проводить общие операции: удаление или восстановление удаленных. Для перехода в режим восстановления удаленных заметок можно воспользоваться системным тегом :deleted. Также возможность перейти к восстановлению присутствует в подсказке, всплывающей сразу же после удаления выбранных заметок.
Если в строке поиска будут обнаружены слова, не являющиеся тегами, то они будут использованы для дополнительной фильтрации всех загруженных в список заметок.

0_850d6_834f7f22_orig

Техническая сторона

Языки разработки - PHP и Javascript. Второго ощутимо больше, потому как основная работа идет на клиентской стороне. Роль серверной стороны сводится к регистрации/авторизации и обработке AJAX запросов на сохранение/получение данных и их поиск. Для AES шифрования на клиенте по 256 битному ключу используется замечательная библиотека SJCL (Stanford Javascript Crypto Library).

Клиентская сторона представляет собой по сути веб-приложение, работающее без перезагрузок, и состоит из набора js классов. Активно используется библиотека JQuery и модули для неё: jquery-autocomplete и SimpleModal. Имеется ядро системы, основная функция которого сводится к хранению и получению пароля, а также шифрованию и расшифровке данных с помощью этого пароля. Все остальные модули системы (используя шаблон observer) уведомляются о получении пароля от пользователя или же об истечении времени его хранения. В зависимости от этого происходит расшифровка закрытых данных с дальнейшим отображением, либо же очистка/шифрование и блокировка.
Все коммуникации между клиентом и сервером осуществляются данными в JSON-формате. При старте веб-приложения все справочные данные уже присутствуют на странице в виде JS массивов и объектов. Дальнейшие запросы выполняются с помощью фоновых AJAX запросов.

Для серверной стороны был разработан микро-фреймворк с поддержкой ЧПУ и абсолютно минимальным функционалом. Подход "ничего лишнего" и максимальное кеширование (общие данные - APC, пользовательские - JSON в gzипованных файлах на RAMFS разделе в оперативной памяти) позволил добиться весьма внушительных показателей быстродействия. Так, к примеру, генерация страницы закрытой пользовательской секции занимает 5-7ms на старой машине уровня Athlon 2800+.

В качестве веб-сервера используется Lighttpd. PHP-FPM как FastCGI процесс-менеджер.
База данных - MySql. Доступ осуществляется с помощью своей реализации подхода, аналогичного библиотеке MeekroDB. Разница заключается в использовании PDO и встроенной валидации таблиц и полей. Данная библиотека выделена в отдельный проект. Использование PDO в теории означает возможность работы с другими базами (помимо MySql), но это не тестировалось.

Для минимизации обращений к сереверу, все JS файлы упакованы в один собирательный файл all.js, а все CSS файлы - в all.css. При модификации любого исходного файла в отладочном режиме происходит автоматическа пересборка.

В системе присутствуют два шелл-скрипта init.sh и halt.sh, выполняемые при старте и выключении сервера соответственно:

  • init.sh создает директорию для кеша (если необходимо) и монтирует ее как RAMFS. Если имеется бекап ранее кешированных данных, то они переносятся в кеш. Дополнительно происходит проверка и создание (если необходимо) вложенных директорий кеша, отвечающих за разные данные. Устанавливаются требуемые права доступа. Генерируется структура базы данных для использования в последующей верификации имен таблиц и полей. Проверка и создание папки логов, её содержимого и установка прав. Подготовка собирательных файлов для JS и CSS файлов. Запуск php-fpm и lighttpd.

  • halt.sh завершает работу lighttpd и php-fpm. Осуществляет бекап всех кешированных данных и отключает кеш.

В заключение

Система бесплатная и открыта для всех. Более того, распространяется с открытыми исходными текстами, так что любой желающий может лично провести аудит кода или, если потребуется, установить эту систему на свой личный домашний или корпоративный сервер. Полные исходные коды находятся в публичном mercurial репозитории, а подробные инструкции по установке - в вики.
В планах: добавить импорт/экспорт данных, детальный аудит, управление сессиями, настройки и многоязычность.
Адрес сайта - http://fortnotes.com/
Или защищённое шифрованное соединение - https://fortnotes.com/
Конструктивные комментарии и пожелания приветствуются.
Приятной и безопасной работы smile

#11 System updates » 2012.04.22 - master password rework » 2012-04-22 19:56:06

admin
Replies: 0

It was decided to simplify a bit the registration process.
There were two passwords - one for login and one for encrypt/decrypt information. It was confusing for users so no there is only one password.
Note that we don't know your password and will never ask you to send it to us but at the same time we won't be able to remind it to you so please keep that password utmost safe.

#12 System description » General information » 2012-04-19 19:20:39

admin
Replies: 2

Everybody today has a lot of private information. Emails, credit cards, phones, sites and so on. It all has to be organized, easily accessible from anywhere and secure. Using notepads, stickers on the monitors or files is not a solution - it's not secure and actually not very convenient.
Here is the list of demandings to the ideal password manager:

  • it should be highly secure

  • it should be always accessible from anywhere

  • easy creation and modification of stored data

  • quick and easy search

So now all this is gathered in this one project.
FortNotes allows not to worry about security and provides all mechanisms of data handling and organizing.
Blackbox technology is the solution. Nothing is unencrypted. Nothing can be stolen or intercepted while the work with the system.

Every piece of information in the system is called "note". Notes can be of different types: email, site, jabber/icq/msn/skype accout, ssh/ftp. It's possible to combine new types from the note fields called "entry". Each entry is the smallest part of information in a note. Entries can be just a simple line of text, URI, email address or multi-line block of text. Notes are a combinations of different entries which can be changed or modified.
After a user registration and logging in a master password is set. It is used to locally encrypt/decrypt notes data. At the server side only encrypted data is storing.
During a note creation a user fills in note entries and assign tags for a note. These tags are used to provide server-side search mechanism. After a user specified some tags for data searching and received server encrypted data it decrypted with user master password and displayed in the list form. Afterward this list can be additionally filtered on the client-side. Each note from the received list can be viewed and modified. There are also system tags for additional search conditions. They are :day, :week, :month, :deleted, :notags. These tags used to filter result notes set by time, show deleted notes or notes without any tags. They can be combined with regular tags.

When the user creates a note before sending it to the server it is encrypted by the AES (Advanced Encryption Standard) adopted by the U.S. government and now used worldwide. Encryption is done with the user's master password so to get it unencrypted it will also be necessary to use master password. Without it it's just a mess. So data is packed into blackbox accessibly only by the owner and only this blackbox will be sent to the server. Nothing else. This means that nobody and even the administration of the server can't see the data in the user's blackbox. Server is used just to store these blackboxes till the users request them back. At the moment a user decided to read some note data a request is done and corresponding blackbox is sent to the user's browser. There an operation of decryption is performed but only after providing the master password by the user. This way can guaranty full user data safety and even in case when server side is compromised for any reasons the user's data is still untouched.

#13 Installation instructions » General information » 2012-04-19 17:20:31

admin
Replies: 2

FortNotes is an open-source project and available to everybody.
You can find its full version in the mercurial public repository here - https://bitbucket.org/DarkPark/fortnotes
It can be installed both on the local computer and on the separate server.

Requirements:

  • PHP version >= 5

  • PHP modules: pdo, apc, json

  • MySQL server with InnoDB support

  • Lighttpd web server (with modules fastcgi and rewrite) or other

After preparing the environment please download the source code and extract it in the convenient place.
Then place this rules to the lighttpd configuration file:

$HTTP["host"] == "fortnotes.local" {
        server.document-root = "/projects/fortnotes.com/public"
        server.errorlog      = "/projects/fortnotes.com/logs/general"
        url.rewrite-once     = (
                "^/(css|captcha|forum|img|js)/(.*)" => "$0",
                "^/sitemap\.xml" => "$0",
                "^/robots\.txt" => "$0",
                "^/(.*)$" => "/index.php/$1"
        )
        ssl.pemfile = "/etc/lighttpd/certs/fortnotes.com.pem"
}

This line should be added to the hosts file:

192.168.0.10    fortnotes.local

The IP address here (192.168.0.10) is the address of the computer where the FortNotes is installed.
The domain name (fortnotes.local) can be any but should be the same as in Lighttpd config file.

Note that file init.sh should be executed right after server start and halt.sh befoer shutdown.
They need to prepare the necessary environment and backup/restore the user cached files.

The file db.sql contains the database structure. Create a user and execute this file to create the necessary db.

After all the preparations the FortNotes should be accessible via this link http://fortnotes.local/.
In case a certificate file was used you should prefer using secure connection https://fortnotes.local/.

#14 System updates » 2012.04.19 - first public release » 2012-04-19 16:41:59

admin
Replies: 0

Today at last the first day of public access to the system.
Welcome smile

Board footer

Powered by FluxBB