documentation updated
This commit is contained in:
@@ -7,40 +7,51 @@
|
||||
|
||||
/** @mainpage SafeChat
|
||||
|
||||
SafeChat runs on:
|
||||
https://safechat.ch
|
||||
SafeChat runs on: https://safechat.ch
|
||||
|
||||
SafeChat development is on:
|
||||
https://dev.marc.waeckerlin.org/redmine/projects/safechat
|
||||
SafeChat is a chat program designed to protect your privacy. It's
|
||||
open, cool, easy, open source and free.
|
||||
|
||||
Implementation Details: @ref security, @ref api, @ref protocol,
|
||||
@ref database, @ref design
|
||||
See @ref features for more goodies, and @ref why for a rationale.
|
||||
|
||||
SafeChat is a chat program designed to protect your privacy. It is
|
||||
designed to be:
|
||||
Implementation Details, see @ref security, @ref api, @ref
|
||||
protocol, @ref database, @ref design */
|
||||
|
||||
/** @page features Features and Benefits
|
||||
|
||||
Best features of SafeChat:
|
||||
|
||||
-# extremely easy to use
|
||||
-# zero installation
|
||||
-# simple registration, within seconds
|
||||
-# web 2.0 - works in any modern browser
|
||||
-# user does not have to care about keys, security, encryption
|
||||
-# Android App available (later also for other phones)
|
||||
-# all cool features
|
||||
-# pseudonym accounts, no phone number, no email,nothing required
|
||||
-# send images and other attachments
|
||||
-# full privacy:
|
||||
-# pseudonym accounts, no phone number, no email, no private data required
|
||||
-# still allows to identify yourself to your chat partners
|
||||
-# all private data is stored on your computer
|
||||
-# you decide who may see what
|
||||
-# safechat.ch knows nothing about you
|
||||
-# send images, videos and any other file attachments
|
||||
-# make fotos on the handy and send them directly
|
||||
-# build groups
|
||||
-# no need to be online, receive messages on next login
|
||||
-# central user directory
|
||||
-# or, when online, open a direct 1:1 connection line
|
||||
-# direct audio and video chat
|
||||
-# distributed user directory
|
||||
-# chat to mail, mail to chat gateways
|
||||
-# send chat invitation links to friends
|
||||
-# absolutely secure
|
||||
-# tap-proof
|
||||
-# no metadata available
|
||||
-# all messages are sent to all users, only the authorized users can decrypt it
|
||||
-# server can be untrusted
|
||||
-# thin server, rich client
|
||||
-# all encryption is done in the client
|
||||
-# server only stores minimal user data (name, public key) and encrypted messages
|
||||
-# server only stores minimal data
|
||||
-# no access to plain data, not even through server confiscation
|
||||
-# double secured internet transport
|
||||
-# messages are encrypted for the recipents only
|
||||
-# messages are encrypted for the recipients only
|
||||
-# server connection is SSL secured in addition
|
||||
-# private data fully in the user's hand
|
||||
-# password is stored in the user's brain only
|
||||
@@ -48,10 +59,11 @@
|
||||
-# private key is stored in the user's local machine only
|
||||
-# two factor security, access needs two tokens
|
||||
-# the password in the user's brain
|
||||
-# the private key in the user's browser memory
|
||||
-# the private key in the user's browser storage
|
||||
-# fully open source
|
||||
-# security concept and implementatino can be reviewed */
|
||||
|
||||
@section why Why I Created SafeChat
|
||||
/** @page why Why I Created SafeChat
|
||||
|
||||
The Swiss parliament has decided to increase the power of police
|
||||
(BÜPF: Bundesgesetz zur Überwachung des Post- und
|
||||
@@ -77,35 +89,26 @@
|
||||
needed. User is guided as much as possible, the interface is as
|
||||
simple as possible. Data is only collected, if it is necessary.
|
||||
|
||||
So I present here the safe chat program for dummies
|
||||
So I present the safe chat program for dummies */
|
||||
|
||||
@page design Design
|
||||
/** @page design Design
|
||||
|
||||
Safechat is designed to provide a safe chat program for
|
||||
dummies. Everything is simple to use, everything is strong
|
||||
enrcrypted, everything is open source. You can chat and you can
|
||||
write encrypted e-mails from the same address.
|
||||
|
||||
<a href="https://www.eff.org/de/node/82654">SafeChat provides</a>:
|
||||
- Encrypted in transit ✓
|
||||
- Encrypted so the provider can't read it ✓
|
||||
- You can verify contacts' identities ✓
|
||||
- Past communications are secure if your key is stolen ✓
|
||||
- Code is open to independent review ✓
|
||||
- Security design is properly documented ✓
|
||||
- Audit not yet done, we invite you to audit our code ✗
|
||||
write encrypted e-mails from the same address. The GUI shall be
|
||||
minimal and straight forward.
|
||||
|
||||
@section overview System Overview
|
||||
|
||||
@startuml{overview.png}
|
||||
interface "user"
|
||||
interface "user" as otheruser
|
||||
"user"
|
||||
"user" as otheruser
|
||||
[secret password]
|
||||
[secret password] as otherpassword
|
||||
user -up- [secret password]
|
||||
otheruser -up- [otherpassword]
|
||||
node "browser" {
|
||||
[engine]
|
||||
folder "ecrypted local storage" {
|
||||
[public key]
|
||||
[private key]
|
||||
@@ -114,7 +117,6 @@
|
||||
}
|
||||
}
|
||||
node "browser" as otherbrowser {
|
||||
[engine] as otherengine
|
||||
folder "encrypted local storage" as otherstorage {
|
||||
[public key] as otherpubkey
|
||||
[private key] as otherprivkey
|
||||
@@ -122,36 +124,57 @@
|
||||
[chat history] as otherhistory
|
||||
}
|
||||
}
|
||||
cloud {
|
||||
node "safechat.ch" {
|
||||
cloud "internet" {
|
||||
() WebRTC
|
||||
node "safechat.ch" as safechatch {
|
||||
() HTTPS
|
||||
() WebSocket
|
||||
[safechat]
|
||||
folder "mailservice" {
|
||||
[roundcube] -down- [DoveCot]
|
||||
[DoveCot] -down- [postfix]
|
||||
}
|
||||
database "sql" {
|
||||
}
|
||||
[safechat] -up- HTTPS
|
||||
[safechat] -up- WebSocket
|
||||
[roundcube] -up- HTTPS
|
||||
[safechat] -down- sql
|
||||
}
|
||||
node "safechat.biz" {
|
||||
node "safechat.biz" as safechatbiz {
|
||||
() HTTPS as HTTPS2
|
||||
() WebSocket as WebSocket2
|
||||
[safechat] as safechat2
|
||||
folder "mailservice" as mailservice2 {
|
||||
[roundcube] as roundcube2
|
||||
[DoveCot] as DoveCot2
|
||||
[postfix] as postfix2
|
||||
[roundcube2] -down- [DoveCot2]
|
||||
[DoveCot2] -down- [postfix2]
|
||||
}
|
||||
database "sql" as sql2 {
|
||||
}
|
||||
[safechat2] -up- HTTPS2
|
||||
[safechat2] -up- WebSocket2
|
||||
[roundcube2] -up- HTTPS2
|
||||
[safechat2] -down- sql2
|
||||
}
|
||||
node "keyserver" {
|
||||
database "keys" {
|
||||
folder "users / keys" {
|
||||
}
|
||||
}
|
||||
}
|
||||
[engine] --down-- HTTP
|
||||
[otherengine] --down-- HTTP
|
||||
[engine] --down-- WebSocket
|
||||
[otherengine] --down-- WebSocket
|
||||
HTTP - [safechat]
|
||||
HTTP - [safechat2]
|
||||
WebSocket - [safechat]
|
||||
WebSocket - [safechat2]
|
||||
[engine] --down-- WebRTC
|
||||
[otherengine] --down-- WebRTC
|
||||
[engine] --down-- keyserver
|
||||
[otherengine] --down-- keyserver
|
||||
[safechat] -- keyserver
|
||||
[safechat2] -- keyserver
|
||||
}
|
||||
user - engine
|
||||
otheruser - otherengine
|
||||
safechatch --right-- safechatbiz
|
||||
browser --down-- HTTPS
|
||||
otherbrowser --down-- HTTPS2
|
||||
browser --down-- WebSocket
|
||||
otherbrowser --down-- WebSocket2
|
||||
browser --down-- WebRTC
|
||||
otherbrowser --down-- WebRTC
|
||||
user -- browser
|
||||
otheruser - otherbrowser
|
||||
@enduml
|
||||
|
||||
@section registration Registration of New User
|
||||
@@ -182,9 +205,18 @@
|
||||
"safechat.ch" -> keyserver [label="lookup(username)"];
|
||||
"safechat.ch" -> browser [label="logon success"];
|
||||
browser -> user [label="ready to chat"];
|
||||
@endmsc
|
||||
@endmsc */
|
||||
|
||||
@page security Password and Secrets Concept
|
||||
/** @page security Password and Secrets Concept
|
||||
|
||||
<a href="https://www.eff.org/de/node/82654">SafeChat provides</a>:
|
||||
- Encrypted in transit ✓
|
||||
- Encrypted so the provider can't read it ✓
|
||||
- You can verify contacts' identities ✓
|
||||
- Past communications are secure if your key is stolen ✓
|
||||
- Code is open to independent review ✓
|
||||
- Security design is properly documented ✓
|
||||
- Audit not yet done, we invite you to audit our code ✗
|
||||
|
||||
Neither the password nor the private key are sent to the
|
||||
server. They remain under the user's control and in the user's
|
||||
@@ -200,9 +232,9 @@
|
||||
There are two secret security tokens: The password, that is in the
|
||||
user's mind and the private key, which is in the user's device, in
|
||||
the local storage of his browser. Messages can only be sent or
|
||||
read with access to both security tokens.
|
||||
read with access to both security tokens. */
|
||||
|
||||
@page protocol SafeChat Protocol
|
||||
/** @page protocol SafeChat Protocol
|
||||
|
||||
@tableofcontents
|
||||
|
||||
@@ -228,25 +260,27 @@
|
||||
browser -> server [label="login.php(username, public-key)"];
|
||||
server -> server [label="if user name does not exist:\nstore username/public-key"];
|
||||
server -> browser [label="success"];
|
||||
@endmsc
|
||||
@endmsc */
|
||||
|
||||
*/
|
||||
|
||||
/** @page api Server API Calls
|
||||
|
||||
@tableofcontents
|
||||
|
||||
List of server REST API calls. SafeChat server implement s REST
|
||||
API, so that all API calls are in the following form, where
|
||||
parameters and values are url encoded:
|
||||
|
||||
@code
|
||||
https://safechat.ch/api-call.php?param1=value1¶m2=value2[...]
|
||||
@endcode
|
||||
|
||||
So for method get() a valid call could be:
|
||||
@code
|
||||
https://safechat.ch/get.php?start=100
|
||||
@endcode
|
||||
/** @page api API Calls
|
||||
|
||||
*/
|
||||
Different users can be on different servers. Servers are connected
|
||||
through @ref serverapi. The client browser first loads the
|
||||
index.html file with HTTPS from server, which loads the javascript
|
||||
code. From then on, everything happens through JSON over
|
||||
WebSockets using @ref clientapi.
|
||||
|
||||
There are several APIs provided by safechat:
|
||||
- @ref clientapi
|
||||
- @ref serverapi
|
||||
- Webmail with Roundcube
|
||||
- SMTP using e.g. postfix
|
||||
- IMAP using e.g. DoveCot */
|
||||
|
||||
/** @page clientapi Client - Server API Calls
|
||||
|
||||
@tableofcontents */
|
||||
|
||||
/** @page serverapi Server - Server API Calls
|
||||
|
||||
@tableofcontents */
|
||||
|
Reference in New Issue
Block a user