Giter Club home page Giter Club logo

ubikom's Introduction

Ubikom Project

GitHub Workflow Status GoDoc reference GoReportCard Coverage Status

Encrypted email service based on decentralized private identity.

Using Ubikom Email Service

Head over to ubikom.cc to create your identity and follow the instructions for email client setup.

The Project

With Ubikom project, you can communicate via email in a secure way, while using the existing email clients that you know and love.

All email within Ubikom ecosystem is encrypted and authenticated.

There are no accounts. You create and register your private key, your possession of the private key is your identity.

You can run your own server, or you can interact with the public server. If you chose the latter, you temporary delegate the authority to send and receive mail to the public proxy server. This delegation can be revoked at any time using your main private key.

You are also able to interact with the legacy email world using our gateway (coming up later).

Why?

Long ago, you were able to run your own email server, which gave you an easy way to communicate with the world. Now you have to use Google or Microsoft for the simple task of sending messages to each other. Your identity is controlled by those companies, not by you. We want to give the identity back to the user and make it decentralized and not controlled by any entity. Based on this, we want to re-imagine email which is secure, private, and simple. It should be trivial for everyone (and everything) to register a name and start communicating.

Getting the Binaries

As of now, you must run a few commands on your machine to generate the keys in a secure way.

You can get binaries by compiling the source, or by pulling the pre-built binaries. The former is recommended, since you can examine the code to make sure no funny business is taking place.

To compile the source, you must have Go and make installed.

To clone the repo, do:

git clone github.com/regnull/ubikom

Now build the binaries:

cd ubikom
make build

The binaries are placed in build directory, corresponding to your system (linux, windows or mac).

If you like to live dangerously, you can get the pre-build binaries by downloading the latest release from GitHub releases page.

Using CLI

Ubikom CLI utility allows you to perform all low-level key, name and address operations.

You can find the CLI command reference here.

References and Other Similar Projects

Self-Sovereign Identity

Decentralized Identifiers (DID)

Sovrin - Global SSI

In Search of Self-Sovereign Identity Leveraging Blockchain Technology

The Path To Self-Sovereign Identity

EIDAS SUPPORTED SELF-SOVEREIGN IDENTITY

Blockchain and Digital Identity

SelfKey - SSI startup

mnmnotmail

Re-thinking email

ubikom's People

Contributors

demchog avatar leo-mednet avatar regnull avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ubikom's Issues

Certain messages cause proxy server to crash

00:52:01 DBG reading messages prefix=message_1AfUuN7SRnm8o7ZieSeNZTh2ibjFj9exGK_1_
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8c pc=0x81d679]

goroutine 107 [running]:
github.com/emersion/go-imap.(*Message).formatItem(0xc000445500, {0xc0046f6370, 0xd})
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/message.go:286 +0x339
github.com/emersion/go-imap.(*Message).Format(0xc000445500)
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/message.go:323 +0x33e
github.com/emersion/go-imap/responses.(*Fetch).WriteTo(0xc000068900, 0xc0004f81e0)
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/responses/fetch.go:64 +0x85
github.com/emersion/go-imap/server.(*response).WriteTo(0xc000494258, 0xc62d20)
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/server/conn.go:130 +0x29
github.com/emersion/go-imap/server.(*conn).writeAndFlush(0xc002280a80, {0xc633a0, 0xc000494258})
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/server/conn.go:208 +0x35
github.com/emersion/go-imap/server.(*conn).send(0xc002280a80)
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/server/conn.go:232 +0x227
created by github.com/emersion/go-imap/server.newConn
/Users/regnull/go/pkg/mod/github.com/emersion/[email protected]/server/conn.go:111 +0x352

Patch emersion/go-message package to handle additional charsets

... to fix the following errors, among others:

01:33:35 ERR failed to create email entity error="unknown charset: unknown charset: message: unhandled charset "ascii""
01:33:35 ERR failed to create email entity error="unknown charset: unknown charset: message: unhandled charset "iso-8859-1""
01:33:35 ERR failed to create email entity error="unknown charset: unknown charset: message: unhandled charset "windows-1252""

I can not send mail to outlook/live mail servers

I can not send mail to outlook/live mail servers.

It is said:

host outlook-com.olc.protection.outlook.com[104.47.22.161] said: 550 5.7.1
Unfortunately, messages from [3.21.133.245] weren't sent. Please contact
your Internet service provider since part of their network is on our block
list (S3140). You can also refer your provider to
http://mail.live.com/mail/troubleshooting.aspx#errors.
[DB8EUR06FT039.eop-eur06.prod.protection.outlook.com] (in reply to MAIL
FROM command)

Failed to get messages on Thunderbird

With this error:

The POP3 mail server (alpha.ubikom.cc) does not support UIDL or XTND XLST, which are required to implement the Leave on Server'', Maximum Message Size'' or ``Fetch Headers Only'' options. To download your mail, turn off these options in the Server Settings for your mail server in the Account Settings window.

The error goes away after client restart.

Check code in store/badger.go

Specifically, this:

func (b *Badger) GetNext(receiverKey []byte) (*pb.DMSMessage, error) {
prefix := []byte("msg_" + util.SerializedCompressedToAddress(receiverKey))
var msg *pb.DMSMessage
err := b.db.View(func(txn *badger.Txn) error {
it := txn.NewIterator(badger.DefaultIteratorOptions)
defer it.Close()
for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() {
err := it.Item().Value(func(v []byte) error {
// TODO: How can this possibly work?
msg = &pb.DMSMessage{}
return proto.Unmarshal(v, msg)
})
if err != nil {
return err
}
return nil
}
return nil
})
if err != nil {
return nil, err
}
return msg, nil
}

Some messages are not delivered from the external mailing list

Mail log:

Sep 17 13:37:32 mail postfix/qmgr[135319]: E6E023E993: from=[email protected], size=6108, nrcpt=1 (queue active)
Sep 17 13:37:32 mail postfix/pipe[684563]: E6E023E993: to=[email protected], orig_to=[email protected], relay=ubikomtransport, delay=0.12, delays=0.07/0/0/0.04, dsn=2.0.0, status=sent (delivered via ubikomtransport service ([90m13:37:32[0m [33mDBG[0m connecting to lookup service [36murl=[0malpha.ubikom.cc:8825)) Sep 17 13:37:32 mail postfix/qmgr[135319]: E6E023E993: removed

But there is no record in the receiver log.

wrong error when registering address

When registering address using name I don't have rights to, I'm getting internal db error instead of authorization error:

@Muntjack:~/work/ubikom/build/linux-amd64$ ./ubikom-cli register address bob alpha.ubikom.cc:8826 --key=secret.key
19:22:24 DBG generating POW...
19:22:47 DBG POW found pow=5f9ca9878aae0255
19:22:47 FTL failed to register address error="rpc error: code = Internal desc = db error"

Possible consistent error while reading messages

Triggered by iOS Mail:

01:54:22 DBG [IMAP] <- ListMessages mailbox=INBOX user=1AfUuN7SRnm8o7ZieSeNZTh2ibjFj9exGK
01:54:22 DBG ListMessages params items=["BODYSTRUCTURE","BODY.PEEK[HEADER]","UID"] mailbox=INBOX seqset={"Set":[{"Start":1402,"Stop":1402}]} uid=true user=1AfUuN7SRnm8o7ZieSeNZTh2ibjFj9exGK
01:54:22 DBG reading messages prefix=message_1AfUuN7SRnm8o7ZieSeNZTh2ibjFj9exGK_1_
01:54:22 ERR error fetching message error="unexpected EOF"
01:54:22 DBG messages returned count=0 mailbox=INBOX user=1AfUuN7SRnm8o7ZieSeNZTh2ibjFj9exGK
01:54:22 DBG [IMAP] -> ListMessages mailbox=INBOX user=1AfUuN7SRnm8o7ZieSeNZTh2ibjFj9exGK

Gateway fails to deliver message

When message is sent from an external sender in response to an internal message:

[email protected] (expanded from [email protected]): Command died with status 1:
"/home/ubuntu/ubikom/ubikom-gateway". Command output: [90m15:38:08[0m
[33mDBG[0m connecting to lookup service [36murl=[0malpha.ubikom.cc:8825
[90m15:38:08[0m [33mDBG[0m sending mail
[36mreceiver=[[email protected] [90m15:38:08[0m
[1m[31mFTL_[0m_[0m failed to send message [31merror=[0m_[31m"failed to
get receiver public key: rpc error: code = InvalidArgument desc = invalid
name"_[0m

Looks like it pulls a wrong key (for [email protected]).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.