reTerminalが届いたので初期設定とかATECC608Aのシリアル取得してみる
マルツのGWセールで、re Terminalを購入した。税込¥21,998。
誤解を恐れず一言で言えば、液晶や各種センサーやセキュアチップつきラズパイみたいな理解でいいと思う
筐体はこんな感じ(↑から画像を拝借)
TypeC繋いだだけで、Raspberry Pi OSのトップ画面が!モニター繋がなくて済むの便利だなー。起動速度も速い。OKを押下。
セットアップトップ画面
言語設定はマウス使わず指でいける。そうre Terminalならね。
パスワード設定。もちろんソフトウェアキーボードはでないので、キーボード指して設定
wifi選ぶ
アップデートするか聞かれる
Next押したら、アップデートが始まる。他の操作はブロックされない。
Macからsshしたいから、ip a
でプライベートIP確認
Macからsshする
$ ssh pi@192.168.xx.xxx
The authenticity of host '192.168.xx.xxx (192.168.xx.xxx)' can't be established.
ECDSA key fingerprint is SHA256:v40ey28pAS9QobYY3TRbTx+G8sdvFUur+8gx8NioMbY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.xx.xxx' (ECDSA) to the list of known hosts.
pi@192.168.xx.xxx's password:
Linux raspberrypi 5.10.60-v7l+ #1449 SMP Wed Aug 25 15:00:44 BST 2021 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May 3 10:37:46 2022
pi@raspberrypi:~ $ ls
Desktop Documents Downloads Music Pictures Public Seeed_Python_ReTerminalQt5Examples Templates Videos
pi@raspberrypi:~ $
python3はもともと入っているのでこのままで
pi@raspberrypi:~/work/20220503 $ python
-bash: python: コマンドが見つかりません
pi@raspberrypi:~/work/20220503 $ pip
-bash: pip: コマンドが見つかりません
pi@raspberrypi:~ $ python3
Python 3.7.3 (default, Jan 22 2021, 20:04:44)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
gitを入れる
sudo apt install git
.netrc
でGitHubの認証情報を設定
machine github.com
login shuntaka9576
password xxx
poetry
を入れる。公式のインストールコマンドのパイプ部分をpython3に変更。
-curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
+curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -
poetry
インストール時に、~/.profile
にexport PATH="$HOME/.poetry/bin:$PATH"
が自動追加されます。再度bash起動し直しで、パスのpoetryが読み込まれます。
$ exit
$ ssh pi@192.168.xx.xxx
$ poetry
Poetry version 1.1.13
ATECC608Aの公開鍵を取得したいので、PythonプロジェクトのGitHubテンプレートを使い、reterminal-sampleを作成。クローンする。
このPythonのテンプレートの解説は、拙著のPythonプロジェクトを快適にするために導入したツールとその設定を参考に。簡単に言えばテストツールなどオールインワンで導入した薄いPoetryプロジェクトテンプレートです。
$ git clone https://github.com/shuntaka9576/reterminal-sample
- このテンプレートは、Pythonのバージョンが
^3.8
対応なので、^3.7
に変更 -
poetry
はtomlを変更すると、lock側でtomlのハッシュ値を持っているため不整合が生じるのでlockは削除 -
make install-dev
でプロジェクト初期化
$ git diff
diff --git a/pyproject.toml b/pyproject.toml
index 775f8cb..298bda7 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -5,7 +5,7 @@ description = ""
authors = ["hoge <hoge@example.com>"]
[tool.poetry.dependencies]
-python = "^3.8"
+python = "^3.7"
python-dotenv = {extras = ["cli"], version = "^0.19.0"}
[tool.poetry.dev-dependencies]
$ rm poetry.lock
$ make install-dev
ここまで来たら、コードを書く必要がでるのでVSCodeから前述のプロジェクトをssh経由参照する
ATECC608を取得するためのライブラリを追加
# 以下のコマンドは、前述のリポジトリルートでコマンドを実行する
# 1. --- cryptographyのインストール ---
$ sudo apt install libffi-dev # cryptographyがcffiと依存、cffiインストールに必要なライブラリ
$ sudo apt install libssl-dev # cryptographyのビルドに必要
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # cryptographyのビルドに必要
# 対話型で1を選択
# cargoのパスが通っていないので、bashの再起動が必要
$ poetry add cryptography
# 2. --- cryptoauthlibのインストール ---
$ sudo apt install cmake
$ export CRYPTOAUTHLIB_NOUSB=True
$ poetry add cryptoauthlib
reTerminalのハードウェアセキュリティ - 概要&プロビジョニング -から、バスとI2Cのアドレス(3, 0xC0)が分かります(公式に知るにはどこを見ればいんだろう...)
以下のPythonコードでシリアルが取れることを確認した
cryptoauthlibの使い方は、github.com/MicrochipTech/cryptoauthtoolsを見ると幸せになれる
from cryptoauthlib import (
atcab_info,
atcab_init,
atcab_random,
atcab_read_config_zone,
atcab_read_serial_number,
atcab_read_zone,
atcab_write_zone,
cfg_ateccx08a_i2c_default,
)
from cryptoauthlib.library import load_cryptoauthlib
ATCA_SUCCESS = 0x00
BLOCK_SIZE = 32
class Ecc608:
def __init__(self):
ECC608_I2C_ADDRESS = 0xC0
RPI_I2C_BUS = 3
load_cryptoauthlib()
cfg = cfg_ateccx08a_i2c_default()
cfg.cfg.atcai2c.slave_address = ECC608_I2C_ADDRESS
cfg.cfg.atcai2c.bus = RPI_I2C_BUS
init_result = atcab_init(cfg)
if not init_result == ATCA_SUCCESS:
raise Exception("init config exception")
# get info
info = bytearray(4)
get_info_result = atcab_info(info)
if get_info_result == ATCA_SUCCESS and info is not None:
self.__info = info
else:
raise Exception("init info exception")
# get serial number
serial_number = bytearray(9)
get_read_serial_number_result = atcab_read_serial_number(serial_number)
if get_read_serial_number_result == ATCA_SUCCESS and serial_number is not None:
self.__serial_number = serial_number
else:
raise Exception("init serial number exception")
# get config zone
config_zone = bytearray(128)
get_read_config_zone_result = atcab_read_config_zone(config_zone)
if get_read_config_zone_result == ATCA_SUCCESS and config_zone is not None:
self.config_zone = config_zone
else:
raise Exception("get config zone exception")
def get_serial_number(self):
return self.convert_to_string_from_bytearray(self.__serial_number)
def convert_to_string_from_bytearray(self, a):
lines = []
for x in range(0, len(a)):
lines.append("{:02X}".format(a[x]))
return "".join(lines)
def main():
ecc608 = Ecc608()
print(f"serial_number: {ecc608.get_serial_number()}")
if __name__ == "__main__":
main()
$ poetry run python src/main.py
serial_number: XXXXXXXXXXXXXXXXXX
ATECC608AのI2CバスとI2Cスレーブアドレスは、この図に書いてあります。
ここまで出来ると証明書なしで認証できるので、薄い実装でIoTができそう。とりあえず最初確認することはこれくらいなので、Close。
Goの環境を追加するよ
$ pwd
/home/pi/work/20220503
$ wget https://golang.org/dl/go1.18.1.linux-armv6l.tar.gz
$ sudo tar -C /usr/local -xzf go1.18.1.linux-armv6l.tar.gz
+export PATH=$PATH:/usr/local/go/bin # goエコシステムツール
+export PATH=$PATH:$HOME/go/bin # go installで入るツール
I2Cコマンドメモ
sudo i2cdetect -y 1
また気づいたらなんかかく
PKCS#11の動作確認のため、p11tool
コマンドをインストール
sudo apt install gnutls-bin
cmake-guiのインストール
sudo apt install cmake-qt-gui
(もはやRaspberry Pi OSの環境構築スクラップになりつつある)
adbコマンドのインストール
sudo apt-get install -y android-tools-adb android-tools-fastboot
# この手順はpoetry配下にできないので没
sudo apt-get install libatlas-base-dev
pip3 uninstall numpy
sudo apt install python3-numpy
wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz
tar xf Python-3.10.4.tgz
cd Python-3.10.4/
make
sudo make install
pip3 install --upgrade pip
pythonのアプリでHTTPリクエストでPKCS#11するために、M2Crypto必要っぽいので導入する
sudo apt-get install build-essential python3-dev openssl libssl-dev swig
poetry add M2Crypto
M2Crypto難しい。。py-curlを試す
sudo apt install libcurl4-openssl-dev libssl-dev
poetry add pycurl
py-curlで、PKCS#11のHTTPリクエストを送ることができた。嬉しい。
出先からreTerminalを弄りたいので、Tailscaleを導入する
参考
sudo apt install apt-transport-https
curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.gpg | sudo apt-key add -
curl -fsSL https://pkgs.tailscale.com/stable/raspbian/buster.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt update
sudo apt install tailscale
sudo tailscale up
tailscale ip -4 # IP v4アドレス確認
SQLiteはデフォルトで入っている(依存ではいったのかも)
$ sqlite3 --version
3.27.2 2019-02-25 16:06:06 bd49a8271d650fa89e446b42e513b595a717b9212c91dd384aab871fc1d0alt1
流行りのLitestremを導入する
Download & install参照
↑だと、ARMじゃないので注意。
$ wget https://github.com/benbjohnson/litestream/releases/download/v0.3.8/litestream-v0.3.8-linux-arm7.deb
$ sudo dpkg -i litestream-v0.3.8-linux-arm7.deb
# これでインストール完了。`dpkg`便利!
$ litestream version
v0.3.8