同時多発テロ警報装置

提供: ディーズガレージ wiki
2018年2月3日 (土) 11:37時点におけるShogooda (トーク | 投稿記録)による版 (Ubuntu)

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

9.11同時多発テロでは量子乱数生成器に偏りが見られたそうです。
同じ環境を用意したら異常値を観測し警報する機器は作れそうです。
使徒襲来に備え試してみます。

同時多発テロ警報装置 別窓

下調べ

方向性

  • お手軽感でRaspberryPiハードウェア乱数生成器を使用。というか試用。
  • 環境ノイズを考慮して/dev/randomのエントロピープールを使用。
  • エントロピープールの収集具合を見ると結構遅いので毎分24ビット程度の乱数を使用(地球意識プロジェクトは毎秒200ビット)。
  • エントロピープールが空の場合、読み出しブロックされるため、時間当たりの乱数数を期待せず、時間当たりの乱数数カウントから偏り率を期待。
  • 量子乱数発生器は0と1の2進数だが数値の意味はなく振り分けているだけ。エントロピープールから取得した10進数乱数を「2進数変換して振り分け」「四捨五入で振り分け」「偶数奇数で振り分け」「素数で振り分け」「0の出現で振り分け」「9の出現で振り分け」6種類試す。それぞれ理論平均値で中央値補正。
  • 解析用にテレメトリ収集。RaspberryPiのmicroSDHCではすぐに書き込み回数の上限に達してしまうので遠隔測定法・テレメタリング手法で試す。
  • RaspberryPiのテレメトリをローカル内Ubuntuサーバに送信。Ubuntuサーバの時系列データベースで可視化。

テレメータ RaspberryPi

準備

RaspberryPiのStretch Liteでデスクトップ環境を作ってみるの手順で準備
固定IPは192.168.1.187
hosts名はiot

Python

$ sudo apt-get install python3-pip
$ pip3 install influxdb
$ mkdir random_metrics
$ cd random_metrics
$ leafpad random_metrics.py

調整中

# -*- coding: utf-8 -*-

from influxdb import InfluxDBClient
from time import sleep

client = InfluxDBClient('192.168.1.191', 8086, 'root', 'root', 'randomdb')

while True:
    with open('/dev/random', 'rb') as f:
        string = str(int.from_bytes(f.read(10), 'big'))
        # 2進数変換 binary conversion
        b_total = 0
        b_count = 0
        for i in string:
            i = str(format(int(i), 'b'))
            for j in i:
                b_count += 1
                j = int(j)
                if j == 1:
                    b_total += 1
        # 四捨五入 round off
        r_total = 0
        r_count = 0
        for i in string:
            r_count += 1
            i = int(i)
            if i >= 5:
                r_total += 1
        # 偶数奇数 even and odd
        e_total = 0
        e_count = 0
        for i in string:
            e_count += 1
            i = int(i)
            if i % 2 == 0:
                e_total += 1
        # 素数出現 prime number
        p_total = 0
        p_count = 0
        for i in string:
            p_count += 1
            i = int(i)
            if i == 2 or i == 3 or i == 5 or i == 7:
                p_total += 1
        # 0の出現 appearance 0
        z_total = 0
        z_count = 0
        for i in string:
            z_count += 1
            i = int(i)
            if i == 0:
                z_total += 1
        # 9の出現 appearance 9
        n_total = 0
        n_count = 0
        for i in string:
            n_count += 1
            i = int(i)
            if i == 9:
                n_total += 1
        import_array = [
            {
                "fields": {
                    "b_metric": b_total / b_count - 15 / 26,
                    "r_metric": r_total / r_count - 0.5,
                    "e_metric": e_total / e_count - 0.5,
                    "p_metric": p_total / p_count - 4 / 10,
                    "z_metric": z_total / z_count - 1 / 10,
                    "n_metric": n_total / n_count - 1 / 10
                },
                "tags": {
                    "machine": "iot"
                },
                "measurement": "metrics"
            }
        ]
        client.write_points(import_array)
    sleep(60)

データベース Ubuntu

IP固定

ネットワークカード名確認

$ ifconfig

enp0s3

$ sudo gedit /etc/network/interfaces

末尾に追記

auto enp0s3
iface enp0s3 inet static
address 192.168.1.191
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

再起動

$ sudo reboot

InfluxDB

参考: InfluxData | Documentation | Installation

インストール

$ wget https://dl.influxdata.com/influxdb/releases/influxdb_1.4.2_amd64.deb
$ sudo dpkg -i influxdb_1.4.2_amd64.deb

再起動

$ sudo reboot

設定

$ influx
# データベース作成
> CREATE DATABASE randomdb
# 作成済みのデータベース確認
> SHOW DATABASES
# ポリシーtrafficを設定(30日保存し古いものは自動的に削除)
> CREATE RETENTION POLICY traffic ON randomdb DURATION 30d REPLICATION 1 DEFAULT
# ポリシーの確認
> SHOW RETENTION POLICIES ON "randomdb"
(# ポリシー変更)
> ALTER RETENTION POLICY traffic ON randomdb DURATION 365d
# 終了
> exit

Grafana

参考: Installing on Debian / Ubuntu

インストール

$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.6.3_amd64.deb
$ sudo apt-get install -y adduser libfontconfig
$ sudo dpkg -i grafana_4.6.3_amd64.deb
$ sudo update-rc.d grafana-server defaults 95 10
$ sudo service grafana-server start

再起動

$ sudo reboot

テレメータとデータベースの接続

Ubuntu

http://127.0.0.1:3000
またはローカルネット内の他のPCから http://192.168.1.191:3000
User: admin
Password: admin

Grafana左上アイコン→Data Sources→+Add data source

Name randomdb
Type InfluxDB
HTTP settings
URL http://localhost:8086
Access proxy
InfluxDB Details
Database randomdb
User admin
Password admin

RaspberryPi

$ cd random_metrics
$ python3 random_metrics.py

Ubuntu

Grafana左上Home→ImportDashboard→Upload .json File

http://dz.plala.jp/wiki_data/Simultaneous_Multiple_Terrorism_Alarm_Device.json