diff --git a/README.md b/README.md index 5d1aa37b..03ec0de5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![Onionr logo](./docs/onionr-logo.png) -(***experimental, not safe or easy to use yet***) +(***experimental, not well tested or easy to use yet***) [![Open Source Love](https://badges.frapsoft.com/os/v3/open-source.png?v=103)](https://github.com/ellerbrock/open-source-badges/) @@ -11,7 +11,6 @@ Anonymous P2P platform, using Tor & I2P. **The main repo for this software is at https://gitlab.com/beardog/Onionr/** - # Summary Onionr is a decentralized, peer-to-peer data storage network, designed to be anonymous and resistant to (meta)data analysis and spam. @@ -28,7 +27,7 @@ Check the [Gitlab Project](https://gitlab.com/beardog/Onionr/milestones/1) to se * [X] End to end encryption of user data * [X] Optional non-encrypted blocks, useful for blog posts or public file sharing * [X] Easy API system for integration to websites -* [ ] Metadata analysis resistance (being improved) +* [X] Metadata analysis resistance ## Other features diff --git a/docs/whitepaper.md b/docs/whitepaper.md index e791b83c..c96739ac 100644 --- a/docs/whitepaper.md +++ b/docs/whitepaper.md @@ -5,7 +5,7 @@ # Introduction -The most important thing in the modern world is information. The ability to communicate freely with others. The internet has provided humanity with the ability to spread information globally, but there are many people who try (and sometimes succeed) to stifle the flow of information. +One of the most important things in the modern world is information. The ability to communicate freely with others is crucial for maintaining personal liberties. The internet has provided humanity with the ability to spread information globally, but there are many people who try (and sometimes succeed) to stifle the flow of information. Internet censorship comes in many forms, state censorship, corporate consolidation of media, threats of violence, network exploitation (e.g. denial of service attacks). @@ -14,25 +14,22 @@ To prevent censorship or loss of information, these measures must be in place: * Resistance to censorship of underlying infrastructure or of network hosts * Anonymization of users by default - * The Inability to violently coerce human users (personal threats/"doxxing", or totalitarian regime censorship) + * The Inability to coerce human users (personal threats/"doxxing", or totalitarian regime censorship) -* Economic availability. A system should not rely on a single device to be constantly online, and should not be overly expensive to use. The majority of people in the world own cell phones, but comparatively few own personal computers, particularly in developing countries. +* Economic availability. A system should not rely on a single device to be constantly online, and should not be overly expensive to use. The majority of people in the world own cell phones, but comparatively few own personal computers, particularly in developing countries. Internet connectivity can be slow or spotty in many areas. There are many great projects that tackle decentralization and privacy issues, but there are none which tackle all of the above issues. Some of the existing networks have also not worked well in practice, or are more complicated than they need to be. # Onionr Design Goals -When designing Onionr we had these goals in mind: +When designing Onionr we had these main goals in mind: * Anonymous Blocks - - * Difficult to determine block creator or users regardless of transport used -* Default Anonymous Transport Layer - * Tor and I2P + * Difficult to determine block creator or users regardless of transport used +* Node-anonymity * Transport agnosticism -* Default global sync, but can configure what blocks to seed +* Default global sync, but configurable * Spam resistance -* Encrypted blocks # Onionr Design @@ -40,9 +37,9 @@ When designing Onionr we had these goals in mind: ## General Overview -At its core, Onionr is merely a description for storing data in self-verifying packages ("blocks"). These blocks can be encrypted to a user (or self), encrypted symmetrically, or not at all. Blocks can be signed by their creator, but regardless, they are self-verifying due to being identified by a sha3-256 hash value; once a block is created, it cannot be modified. +At its core, Onionr is merely a description for storing data in self-verifying packages ("blocks"). These blocks can be encrypted to a user (or for one's self), encrypted symmetrically, or not at all. Blocks can be signed by their creator, but regardless, they are self-verifying due to being identified by a sha3-256 hash value; once a block is created, it cannot be modified. -Onionr exchanges a list of blocks between all nodes. By default, all nodes download and share all other blocks, however this is configurable. +Onionr exchanges a list of blocks between all nodes. By default, all nodes download and share all other blocks, however this is configurable. Blocks do not rely on any particular order of reciept or transport mechanism. ## User IDs @@ -52,11 +49,11 @@ Public keys can be generated deterministicly with a password using a key derivat ## Nodes -Although Onionr is transport agnostic, the only supported transports in the reference implemetation are Tor .onion services and I2P hidden services. Nodes announce their address on creation. +Although Onionr is transport agnostic, the only supported transports in the reference implemetation are Tor .onion services and I2P hidden services. Nodes announce their address on creation by connecting to peers specified in a bootstrap file. Peers in the bootstrap file have no special permissions aside from being default peers. ### Node Profiling -To mitigate maliciously slow or unreliable nodes, Onionr builds a profile on nodes it connects to. Nodes are assigned a score, which raises based on the amount of successful block transfers, speed, and reliabilty of a node, and reduces based on how unreliable a node is. If a node is unreachable for over 24 hours after contact, it is forgotten. Onionr can also prioritize connection to 'friend' nodes. +To mitigate maliciously slow or unreliable nodes, Onionr builds a profile on nodes it connects to. Nodes are assigned a score, which raises based on the amount of successful block transfers, speed, and reliabilty of a node, and reduces the score based on how unreliable a node is. If a node is unreachable for over 24 hours after contact, it is forgotten. Onionr can also prioritize connection to 'friend' nodes. ## Block Format @@ -93,5 +90,3 @@ This can be done either by the creator of the block prior to generation, or by a In addition, randomness beacons such as the one operated by [NIST](https://beacon.nist.gov/home) or the hash of the latest blocks in a cryptocurrency network could be used to affirm that a block was at least not *created* before a given time. # Direct Connections - -We propose a system to \ No newline at end of file diff --git a/onionr/serializeddata.py b/onionr/serializeddata.py index c4063909..1587e74e 100644 --- a/onionr/serializeddata.py +++ b/onionr/serializeddata.py @@ -39,4 +39,5 @@ class SerializedData: stats['uptime'] = self._core.onionrInst.communicatorInst.getUptime() stats['connectedNodes'] = '\n'.join(self._core.onionrInst.communicatorInst.onlinePeers) stats['blockCount'] = len(self._core.getBlockList()) + stats['blockQueueCount'] = len(self._core.onionrInst.communicatorInst.blockQueue) return json.dumps(stats) diff --git a/onionr/static-data/www/board/index.html b/onionr/static-data/www/board/index.html index ffc47159..7486a910 100644 --- a/onionr/static-data/www/board/index.html +++ b/onionr/static-data/www/board/index.html @@ -12,7 +12,7 @@ diff --git a/onionr/static-data/www/private/index.html b/onionr/static-data/www/private/index.html index d78140a5..8907195b 100644 --- a/onionr/static-data/www/private/index.html +++ b/onionr/static-data/www/private/index.html @@ -21,6 +21,7 @@

Stats

Uptime:

Stored Blocks:

+

Blocks in queue:

Connected nodes:


         
diff --git a/onionr/static-data/www/shared/main/stats.js b/onionr/static-data/www/shared/main/stats.js
index bd6dcb18..b7d05776 100644
--- a/onionr/static-data/www/shared/main/stats.js
+++ b/onionr/static-data/www/shared/main/stats.js
@@ -20,11 +20,13 @@
 uptimeDisplay = document.getElementById('uptime')
 connectedDisplay = document.getElementById('connectedNodes')
 storedBlockDisplay = document.getElementById('storedBlocks')
+queuedBlockDisplay = document.getElementById('blockQueue')
 
 function getStats(){
     stats = JSON.parse(httpGet('getstats', webpass))
     uptimeDisplay.innerText = stats['uptime'] + ' seconds'
     connectedDisplay.innerText = stats['connectedNodes']
     storedBlockDisplay.innerText = stats['blockCount']
+    queuedBlockDisplay.innerText = stats['blockQueueCount']
 }
 getStats()
\ No newline at end of file