Skip to main content

A common identity module

Project description

Ming Ke Ming (名可名) -- Account Module (Python)

license Version PRs Welcome Platform

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 version
  • 0x02 BTC version
  • 0x03 Extended BTC version
  • 0x04 ETH version
  • 0x05 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:

  1. The length of name must more than 1 byte, less than 32 bytes;
  2. It should be composed by a-z, A-Z, 0-9, or charactors '_', '-', '.';
  3. 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

mkm-2.1.0.tar.gz (29.6 kB view details)

Uploaded Source

Built Distribution

mkm-2.1.0-py3-none-any.whl (61.2 kB view details)

Uploaded Python 3

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

Hashes for mkm-2.1.0.tar.gz
Algorithm Hash digest
SHA256 f3bc37a3505c468239eae6d4da5167a69b823e09fc6e0df055c315025da904e0
MD5 a589716ea206387cec01676e9bddbdae
BLAKE2b-256 8b9e6357858abef552fab34c97903203d4dbfffee372e34af56bb101348b7df5

See more details on using hashes here.

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

Hashes for mkm-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5575ec36cf6eb72b996b36c6d02a66192a436a8f830bbd02b12c4a658bd31911
MD5 65b1fc118993a10b90ac23f9d5c4d94f
BLAKE2b-256 497e2602353201a238d42be0332c39942d955a9d1801fd9363653c2e218985a7

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page