レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

大きな電卓にアカウント管理の機能を追加する

2020年07月06日 | 電子工作

インターネットの様々なサービスを利用していると、オンラインアカウントが増えてきます。これらを管理するのにスマホやPCのアプリケーションを使うことになると思いますが、ネットバンキングのような重要なアカウント情報とかをネットに接続されているデバイスで管理するなんてセキュリティ上とても危険ですよね。
なので今はこれで管理しています。



SONYの古いPDAのCLIEです。かつて一世を風靡したPalmデバイスのSONY版です。別売りのネットワークカードでインターネットにつなげることもできるのですが、ずいぶん前にカードが壊れてしまったので(いわゆるソニータイマーか?wiki)スタンドアロンで使用しています。このCLIEにパスワード管理ソフトをインストールして、全てのオンラインアカウントを管理しているのです。キーボード付きなのでアカウントの入力やパスワードの変更が簡単で重宝しています。

ところがこのCLIE、スタンドアロンなのでセキュリティは万全なのですが、古いためかタッチパネルの認識がおかしくなってきました。キーボードがあるので使用出来るのですが、いずれ故障してしまうかもしれません。

そこで以前よりArduinoベースのパスワード管理デバイスを作りたいと思っていたのです。
大きな電卓を改造したときにEEPROM(24LC256)を搭載しておいたのは、将来パスワード管理デバイスにしてみたいと考えていたためです。

前回までに大きな電卓をゲーム電卓に仕立てることが出来たので、さらにここにパスワード管理機能を追加することにしました。
しかし、仕様をきちんと決めずにスケッチ作成に取り掛かってしまったので途中で何度もスケッチを書き直す羽目に…。
また、ArduinoのWireライブラリの仕様と24LC256のI2C書き込みもしっくり行かない部分があって、めんどくさくなってしばらく放置していました。

その間Playstation ClassicとPro Microに接続した色々なコントローラーで遊んでいたのですが、それにも飽きてきたので気合を入れ直してパスワード管理アプリの制作に取り掛かることにしました。

きちんと仕様を決めて、再度パスワード管理のスケッチを作り直してみました。出来上がったスケッチは以下のようになりました。

DigitClass.h
ATmega328PassManager.ino
バージョンアップしました。

以前作成した電卓+ゲームに管理機能を追加しています。まだ追加したい機能もあるので、完成ではなく最低限使えるところまでは出来たといった感じです。

3つのアプリを一つのデバイスに押し込んだのと、電卓キーでのカナ・アルファベットの入力処理などのためスケッチがかなり肥大化してしまいました。さらにメモリ節約やEEPROM書き込みを最小限にするためにややこしい処理内容になっているので、このスケッチを他のデバイスに移植するのはなかなか面倒だと思います。

電卓とゲームについてはキー入力に手を入れましたが、以前のものとほとんど同じです。なのでパスワード管理機能についてのみ簡単に説明してみます。

今回利用したEEPROMの24LC256はI2C書き込みになっていて、容量は32kバイトあります。書き込みは1バイトずつ行うことも出来ますが、多くのデータを書き込むときは書き込み回数を抑えるためページ単位で書き込むことになります。24LC256は1ページ64バイトで先頭から64バイトずつページが割り当てられています。ページ間にまたがって書き込みを行うときは、ページごとに2回に分けて書き込まなければなりません。
そこで今回作成したパスワード管理機能では、1アカウントで使用するデータサイズを64バイト(タイトル16バイト、備考等16バイト、アカウント名16バイト、パスワード16バイトを想定)にして、ページ間にまたがる書き込みを行わないようにしました。

ところがArduinoのWireライブラリではI2Cの読み書きに32バイトのバッファしか用意されていないので、読み込み時には32バイトまでしか読めず、書き込み時にはアドレス指定の2バイトが書き込みデータに含まれるので30バイトしか書き込めません。
この仕様のためにしばらく悩みましたが、どうしようもないので読み込みは32バイト×2回、書き込みは16バイト×4回とすることにしました。

それからもう一点、EEPROMの書き込み回数はできるだけ抑制したいのですが、データの削除や並び替え時には書き込み操作が必要になります。このとき単純にEEPROMの先頭からデータを並べて書き込んでおくと、データの移動時に多くの書き込み操作が発生してしまいます。
そのためEEPROMの先頭から0x03DFまでをアカウントデータを書き込んだアドレス(1つのアドレスを記録するのに2バイト必要)を収納するデータテーブル領域とし、このテーブルを見てデータの読み書きを行います。データの削除時にはこのテーブルに削除マークをつけるだけで済みますし、並び替えもこのテーブルのアドレスデータを入れ替えるだけで済みますので、書き込みバイト数を格段に抑えることが出来ます。
実際のデータは0400〜7FFFの間に64バイト単位で書き込みます。そのため登録できるデータの最大件数は496件になります。

表示デバイスはHD44780(日本仕様)互換のLCDを使用しているので、入力できる文字はカナ・アルファベット・数字になります。



電卓で文字入力を行う必要があるので、スマホや固定電話の受話器などと同様に数字キーによる文字入力を行えるようにしました。具体的にはこんな感じです。

キー カナ    アルファベット 数字

7  アイウエオ :;<=>?@ 7
8  カキクケコ ABC     8
9  サシスセソ DEF     9
4  タチツテト GHI     4
5  ナニヌネノ JKL     5
6  ハヒフヘホ MNO     6
1  マミムメモ PQRS    1
2  ヤユヨ   TUV     2
3  ラリルレロ WXYZ    3
0  ゛゜    !"#$%   0
00 ワヲンー  &'()*   [\]^_`
.  。「」、・ +,-./   {|}←→

上記以外のキーには挿入や削除などの編集機能を割り当てていますが、長くなるので詳細はまた別の機会にしましょう。
管理機能全体の使い方についてざっくりと紹介すると以下のようになります。

電源投入時は電卓モード
M-またはM+キーで機能選択メニュー (パスワード管理・電卓・ゲーム)に移動


パスワード管理を選択

アカウントのタイトル・備考(16x2行)を表示するモードになる (M-,M+で表示アカウント切り替え)
ここで以下の機能を割り当てたキーを押して操作する

選択(=) → アカウントの詳細表示モード (M-,M+で16x4行を表示 タイトル・備考・アカウント名・パスワード)

新規入力・編集(+,x) → データ入力モード (上記の文字入力)

削除(-) → アカウントデータの削除 (削除マークをつけるだけ)

終了(AC) → 電卓にもどる

これ以外にアカウントデータの並び替え、検索、パスワード自動生成、バックアップ機能を追加しようと思っています。
入力したアカウントデータに対して参照用のパスワード入力とかデータの暗号化などは一切行っていません。自作のデバイスなので仕様を知らなければデータを抜き取られることはまずないでしょう。

完成までもう少しかかりそうですが、今後も地道に作って行こうと思います。



最新の画像もっと見る

コメントを投稿