Giter Site home page Giter Site logo

ble_blockchain's Introduction

日本語

初めに

本レポジトリは卒論に向けた開発を行うためのものである.

システムの概要

BLEとBlockchainを組み合わせたシステムを構築する. Raspberrypiは4台程度用意し,相互通信をBLEを用いて実現する. RaspberrypiをBLEビーコンとし,スマートフォンやノートパソコンのBLEブロードキャストをキャッチする.キャッチした情報をAESで暗号化し,BLE経由でデバイス間で共有する.共有されたデータをブロックにのせ,以前のハッシュ値と見比べることでチェーンを作成する.

blockchain

blockchainフォルダでは,ブロックとチェーンを作成し,情報を載せるためのブロックチェーンを実装する.

ブロックチェーンをテストするためのDockerを作成している途中である.

ble

Raspberrypi同士の通信ではl2cap_client.pyとl2cap_server.pyを利用する. discover.pyでbleブロードキャストをキャッチする.

raspberrypiのbleではセキュリティの観点からか,ble検索にかからないようになっているので,定期的に以下のコマンドを実行する必要がある. つまりサーバーとして情報を受け取るためには以下のコマンドを毎回行う必要があるので,サーバを起動するときに以下のコマンドを自動的に実行するように変更する必要がある.

$ bluetoothctl
$ discoverable on

main

bluetoothでの同時送受信が困難になるのなら,ラウンドロビン方式(1が送ってる時は他のデバイスは送らない)を取る必要がある

セットアップ

## 環境構築 Raspberrypi上で

$ sudo apt-get install git
$ git clone https://github.com/Fu-Te/BLE_Blockchain
$ cd BLE_Blockchain
$ python3 install_package.py

上記コマンドを行なうと環境構築が完了する.

使い方

settings.jsonファイルに,今回利用する端末(ラズベリーパイ)のアドレスを記載してください. 記載する際に,自端末のアドレスは記入しないでください.(4台のネットワークの場合は自端末を除く3台のアドレスを記入)

次に,

$ python3 main.py

上記コマンドを実行することで利用することが可能.

処理の流れ

※の部分はまだ開発が終わっていない部分

ビーコンのアドレスをjsonから取得
↓
秘密鍵,公開鍵の作成
↓
Discoverable on
↓
bt端末をスキャン
↓
※必要な情報以外を落とす
↓
署名の作成
↓
送信用データの作成
↓
※ラウンドロビン
※データの受信(要検討)
※データの送信(要検討)
↓
署名の検証
↓
※ブロックチェーンへ追加

※データをWeb上で確認できるようにする
or
※csvデータをLAN内から取得できるように

変数

送信するデータの格納用リスト

# [df, public_key, signature]を格納します send_data_list = [] 例)[[df,public_key,signature],[df1,public_key1,signature1]] send_data_list[[0][1]]だと,public_keyがでる

受け取る情報の格納用リスト

[[df, public_key, signature],[df, public_key, signature]]のような構成になる.

取り出すためにはreceive_data_list[1][0]みたいな感じで使う

receive_data_list = []

ble_blockchain's People

Contributors

t3pp31 avatar kazhirotsuka avatar keigomiyamae avatar mariemarie67 avatar

Watchers

 avatar

ble_blockchain's Issues

Blockchainにおいてどうやって3台で同じデータを保持するか

Blockchainでは現在,3つ以上データがあった場合にブロックに追加しているが,これだとハッシュ値などが異なってしまうケースがある(ブロックに追加される順番が異なる等により).この問題を回避するために新たなアルゴリズムを考える必要がありそう

Bluetooth接続

Bluetooth接続でキャプチャした温度を送信できるようにする

無駄な端末データを落とす

bluetoothctl scan onあるいはbluepyなどを用いて、取得したBluetoothアドレスの中から不必要なデータを削ぎ落したい。

csvデータの送信

ホスト(操作機)から要求があった時、1時間ごとにcsvデータをホスト機へ送信する機能の実装(Bluetooth)

Raspberrypi上でのble Discoverableをonにするプログラムの作成

raspberrypiのbleではセキュリティの観点からか,ble検索にかからないようになっているので,定期的に以下のコマンドを実行する必要がある. つまりサーバーとして情報を受け取るためには以下のコマンドを毎回行う必要があるので,サーバを起動するときに以下のコマンドを自動的に実行するように変更する必要がある.

$ bluetoothctl
$ discoverable on

以上のことをPythonのライブラリであるsubprocess等を用いて実装する必要がある 

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.