A common identity module
Project description
Ming Ke Ming (名可名) -- Account Module (Python)
This document introduces a common Account Module for decentralized user identity authentication.
Copyright © 2018-2019 Albert Moky
0. Meta
The Meta was generated by your private key, it can be used to build a new ID for entity, or verify the ID/PK pair.
It consists of 4 fields:
Field | Description |
---|---|
type | Meta Algorithm Version |
key | Public Key |
seed | Entity Name |
fingerprint | Signature to generate address |
0.0. Meta Type
0x01
Default version0x02
BTC version0x03
Extended BTC version0x04
ETH version0x05
Extended ETH version
0.1. Key
A public key (PK) was bound to an ID by the Meta Algorithm.
0.2. Seed
A string as same as ID.name for generate the fingerprint.
0.3. Fingerprint
THe fingerprint field was generated by your private key and seed:
data = seed.encode('utf-8')
fingerprint = private_key.sign(data)
1. ID
The ID is used to identify an entity(user/group). It consists of 3 fields and 2 extended properties:
Field | Description |
---|---|
name | Same with meta.seed |
address | Unique Identification |
terminal | Login point, it's optional. |
type | Network type |
The ID format is name@address[/terminal]
.
1.0. ID Type
The network type of a person is 8
, and group is 16
:
class NetworkType(IntEnum):
# Person Account
MAIN = 0x08 # 0000 1000 (Person)
# Virtual Groups
GROUP = 0x10 # 0001 0000 (Multi-Persons)
POLYLOGUE = 0x10 # 0001 0000 (Multi-Persons Chat, N < 100)
CHATROOM = 0x30 # 0011 0000 (Multi-Persons Chat, N >= 100)
# Network
PROVIDER = 0x76 # 0111 0110 (Service Provider)
STATION = 0x88 # 1000 1000 (Server Node)
# Internet of Things
THING = 0x80 # 1000 0000 (IoT)
ROBOT = 0xC8 # 1100 1000
1.1. Name
The Name field is a username, or just a random string for group:
- The length of name must more than 1 byte, less than 32 bytes;
- It should be composed by a-z, A-Z, 0-9, or charactors '_', '-', '.';
- It cannot contain key charactors('@', '/').
# Name examples
user_name = "Albert.Moky"
group_name = "Group-9527"
1.2. Address
The Address field was created with the Fingerprint in Meta and a Network ID:
def check_code(data: bytes) -> bytes:
# check code in BTC address
return sha256(sha256(data))[:4]
class BTCAddress(Address):
@classmethod
def new(cls, data: bytes, network: NetworkType=0) -> Address:
"""Generate address with fingerprint and network ID
:param data: fingerprint (signature/key.data)
:param network: address type
:return: Address object
"""
prefix = chr(network).encode('latin1')
digest = ripemd160(sha256(data))
code = check_code(prefix + digest)
address = base58_encode(prefix + digest + code)
return BTCAddress(address)
When you get a meta for the entity ID from the network, you must verify it with the consensus algorithm before accept its public key.
1.3. Terminal
A resource identifier as Login Point.
2. Samples
ID
# ID examples
ID1 = "hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj" # Immortal Hulk
ID2 = "moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk" # Monkey King
Meta
/* Meta(JsON) for hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj */
{
"version" : 0x01,
"key" : {
"algorithm" : "RSA",
"data" : "-----BEGIN PUBLIC KEY-----\nMIGJAoGBALB+vbUK48UU9rjlgnohQowME+3JtTb2hLPqtatVOW364/EKFq0/PSdnZVE9V2Zq+pbX7dj3nCS4pWnYf40ELH8wuDm0Tc4jQ70v4LgAcdy3JGTnWUGiCsY+0Z8kNzRkm3FJid592FL7ryzfvIzB9bjg8U2JqlyCVAyUYEnKv4lDAgMBAAE=\n-----END PUBLIC KEY-----",
// other parameters
"mode" : "ECB",
"padding" : "PKCS1",
"digest" : "SHA256"
},
"seed" : "hulk",
"fingerprint" : "jIPGWpWSbR/DQH6ol3t9DSFkYroVHQDvtbJErmFztMUP2DgRrRSNWuoKY5Y26qL38wfXJQXjYiWqNWKQmQe/gK8M8NkU7lRwm+2nh9wSBYV6Q4WXsCboKbnM0+HVn9Vdfp21hMMGrxTX1pBPRbi0567ZjNQC8ffdW2WvQSoec2I="
}
(All data encode with BASE64 algorithm as default, excepts the address)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mkm-2.1.0.tar.gz
.
File metadata
- Download URL: mkm-2.1.0.tar.gz
- Upload date:
- Size: 29.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.0b3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f3bc37a3505c468239eae6d4da5167a69b823e09fc6e0df055c315025da904e0 |
|
MD5 | a589716ea206387cec01676e9bddbdae |
|
BLAKE2b-256 | 8b9e6357858abef552fab34c97903203d4dbfffee372e34af56bb101348b7df5 |
File details
Details for the file mkm-2.1.0-py3-none-any.whl
.
File metadata
- Download URL: mkm-2.1.0-py3-none-any.whl
- Upload date:
- Size: 61.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.0b3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5575ec36cf6eb72b996b36c6d02a66192a436a8f830bbd02b12c4a658bd31911 |
|
MD5 | 65b1fc118993a10b90ac23f9d5c4d94f |
|
BLAKE2b-256 | 497e2602353201a238d42be0332c39942d955a9d1801fd9363653c2e218985a7 |