Friend Identification

Registered by aj00200

Identify friends based on the connection request packet (0x0000) packet they send.

== Necessity ==
When we receive anonymity connections through sources such as Tor, it is not possible to identify who went the packet based on the source IP address. Also, it is not practical to expect users with dynamic IP addresses to tell their friends their IP address every time it changes.

For this reason, we need a way to send encrypted information about the source of the connection request to the node who is receiving the connection request. The public keys for each node should have been exchanged and verified during a previous process, in which case, it is possible to simply sign a connection packet. All packets should be signed anyways to prevent forgery or replay attacks of data collected from other friends.

On top of this, the packet is encrypted as is done with the code now. It is encrypted via RSA to the receiving node's public key.

== Steps ==
* Decrypt the 0x0000 packet with our nodekey
* Parse the packet with libs.packets
* Get the sender key ID and signature
* Store a connection to the Friend object
* Use the key property to reply 0x0002

== Future ==
In the future, it might be a good idea to add a timestamp field to the packet to prevent a replay attack.

Blueprint information

Status:
Started
Approver:
Vomun Developers
Priority:
High
Drafter:
Vomun Developers
Direction:
Approved
Assignee:
Vomun Developers
Definition:
New
Series goal:
Accepted for 0.0.0
Implementation:
Good progress
Milestone target:
milestone icon build-8
Started by
aj00200

Whiteboard

Current Implementation:
 * libs.friends.identify_friend setup in lp:~aj00200/anonplus/trunk. Contains the above steps for completion as TODO comments.
 * lp:~x0factor/anonplus/trunk also contains the starting crypto code. I will make a new branch for this at lp:~vomun-developers/anonplus/friend-identification soon for collaboration on this task

This is required for build-8 because the Tor tunnel depends on this code working.

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.