紹介する作品は実際に公開しています。覗いて頂けると嬉しいです│'ω')☆

「Base」紹介HP → https://ss719917.stars.ne.jp/HP/index.html
「Base」試用版 → https://ss719917.stars.ne.jp/
探究活動で開発したWebアプリ「Base」を題材に,設計や開発時の工夫を全5回で紹介します。
制約からの着想
セキュリティといえば,サーバを用いたログイン処理などが一般的であると思います。
しかし,試用版においてはJavaScript上に処理を記載するしかなく,リストごと確認できてしまうため意味を成しません。
そこで, 「データを守る」 から 「データの意味を読み取らせない」 ことに視点を変えてユーザ名生成機能を開発しました。
ユーザ名を用いたセキュリティ
ユーザ名に個人情報を埋め込み,サーバには増えていくデータだけを保存する仕組みになっています。

独自に32進数的な扱いを行い,2進数に変換することで必要な情報を取り出します。
間違った学年やクラスで入った場合
→ 教科名がズレてしまう為,成績データを正しく評価できない。
この仕組みによって,管理者である私すらも内部の情報に意味を持たせられません。
ユーザ名の生成規則
共通
⑤ユーザの個人番号
通し番号になっていて,一意にユーザを指します。
2進数に変換したときに14桁になるよう,最大値は16384に設定しました。下で紹介している暗号化用コードを足し合わせるため,実際の最大人数は31の2乗を引いた15423名です。
⑥暗号化用コード
let a=new Date().getMilliseconds()%32;
UKey=Change10to2(5,a);
function Change10to2(a,b){
let c=[];
for(let d=0; d<a; d++){
c.unshift(b%2);
b=Math.trunc(b/2);
}
return c;
}
登録時のミリ秒を32で割った余りをコードとして利用しています。
2乗したものを個人番号に足すことで,複数のアカウントを登録したときの連続性を見えにくい,利用開始初期に0が連続しにくい,といった効果を得る為に追加しました。
生徒アカウント
所属の他に学年,クラス,授業選択のデータが含まれます。
④授業選択
- 時間割のデータをもとに,選択授業を集めた配列を生成
- フラット化して1次配列に
- それに対応したbit列をユーザ名に埋め込む
これらの情報を単語帳の成績データや,成績管理の点数と教科の紐づけに活用しています。
データ設計については次回の投稿で解説していますので,是非ご覧ください。
教員アカウント
教科と教科内部での通し番号を含めて個人を特定しています。
最後に
JavaScriptにこだわってセキュリティを考えた結果, 「ユーザ名に全個人情報を持たせる」 というアイデアが生まれました。これは,記憶力への依存度が高いなどの課題がありつつも,アプリ自体の安全性が非常に高い仕組みです。
以上が「Base」独自のセキュリティシステムに関する紹介になります。
次回は学校向けのシステムとしての,時間割データの管理方法について紹介します。
「Base」紹介HP(再掲) → https://ss719917.stars.ne.jp/HP/index.html
「Base」試用版(再掲) → https://ss719917.stars.ne.jp/
前回 → ①:設計と開発のきっかけ
今回 → ②:制約から考えたユーザ名生成
次回 → ③:時間割を管理するデータ設計
投稿次第,掲載します。