質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

2回答

2324閲覧

Pythonで自作のパスワードマネージャーを作りたい

asianLad

総合スコア16

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/07 02:00

編集2021/06/07 02:09

Pythonで自作のPWマネージャーを作りたいのですがアドバイスお願いいたします。

ローカルでの使用でも暗号化をしたほうが良いと言われたのですが理由が知りたいです。
なぜローカルなのに暗号化が必要なのか知りたいです。私の書いたコードですとどのような脆弱性がありますか?
またどのように実装すれば良いのでしょうか?下記のコードをは辞書にPWを格納してターミナルで引数をとってそれに対応しているキーを返すことで管理しています。
初心者ですので、正直どのようにどこで暗号化すれば良いのかイメージがつきません。

以下がコードになります。

python

1 2#! python3 3# pw.py - Password Management Program (Vulnerable ) 4 5PASSWORDS = {'email':'F7minlifiliofn20493UFprfeH39', 'blog':'VmALH43nOUffsd49530u','luggage':'12345'} 6 7import sys 8import pyperclip 9 10if len(sys.argv) < 2: 11 print('How to use "pw.py" file on mac terminal. please type pyhton3 pw.py "account name" in your terminal.') 12 print('To copy PW to clipboard') 13 sys.exit() 14 15account = sys.argv[1] # The first command line argument is the account name. [0] is the file name which is "pw.py" 16account = account.lower() 17 18if account in PASSWORDS: 19 pyperclip.copy(PASSWORDS[account]) # 20 print("The password of " + account + " is copied on clipboard") 21else: 22 print('account "' + account + '" dosen\'s exist') 23

例えばこのような簡単なシーザー暗号化のコードを用意したのですが、もしこのような暗号化のコードをどのようにして上記のPWマネージャーのコードと組み合わせれば良いのでしょうか?
そもそも使えない場合は以下のコードは無視してください。

Python

1# シーザー暗号 2# https://www.nostarch.com/crackingcodes/ (BSD Licensed) 3 4import pyperclip 5 6# 暗号化、復号化する文字列 7message = "This is me message" 8 9#暗号化、復号化の鍵 10key = 21 11 12#プログラムが暗号化するか復号化するか 13mode = "encrypt" # Choose either encrypt or decrypt 14 15# 暗号化できるシンボルの全候補 16SYMBOLS = "ABCDEFGHIJKLMNOPQRSTYVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?." 17 18#メッセージの暗号化、復号化の結果を格納する 19translated = "" 20 21for symbol in message: 22 #注意:文字列SYMBOLに含まれるシンボルのみを暗号化、復号化する 23 if symbol in SYMBOLS: 24 symbolIndex = SYMBOLS.find(symbol) 25 26 #暗号化、復号化する 27 if mode == "encrypt": 28 translatedIndex = symbolIndex + key 29 elif mode == "decrypt": 30 translatedIndex = symbolIndex - key 31 32 #必要に応じてラップアラウンド処理をする 33 if translatedIndex >= len(SYMBOLS): 34 translatedIndex = translatedIndex - len(SYMBOLS) 35 elif translatedIndex < 0: 36 translatedIndex = translatedIndex + len(SYMBOLS) 37 38 translated = translated + SYMBOLS[translatedIndex] 39 else: 40 #暗号化、復号化せずにシンボルを追加する 41 translated = translated + symbol 42 43#変換後の文字列を出力する 44print(translated) 45pyperclip.copy(translated) 46

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ローカルでの使用でも暗号化をしたほうが良いと言われたのですが理由が知りたいです。

攻撃者がローカルにいる場合もあるからです。それは同じホストにログインしている別ユーザかもしれないし、並行で動いている別のプロセスかもしれません。

なぜローカルなのに暗号化が必要なのか知りたいです。私の書いたコードですとどのような脆弱性がありますか?

暗号化が必要かどうかは要件次第です。例えば「ローカルは安全とみなす」と前提を置けば対策は不要です。
ただ一般的な要件として、ローカルの別プロセス・プログラムからの攻撃対策は必要でしょう。つまり、あなたのパスワードマネージャ以外からはパスワードを参照できないようアクセス制限するか、アクセスしても読めないように暗号化するなどの対策は求められると思います。さらに本当に重要なデータを扱うのなら、動作中のメモリを覗かれても漏洩しないことも求められるかもしれません。

投稿2021/06/07 03:31

sigsegv

総合スコア895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

普通に考えればわかるはずですが…

ソースコードは単なるテキストファイルです。

なのでそのまま読まれやすいです。

単にワンタイムパスワードを生成するだけならいいですが、管理をするプログラムなのでパスワードが見られるのは良くありません。

それだと、付箋紙とか書いておくのと変わりありません。

同じ付箋紙に書いておくでも「暗号化」しておけば少しはマシと言うもの。

その意味ではないでしょうか。

投稿2021/06/07 02:29

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問