パスワードのリストを保存するのは避けたいのですが、代わりに公開されている MATLAB 関数を使用してパスワードを確実に再生成したいと考えています。この関数は、どこにも保存されていない秘密鍵を取得して、乱数ジェネレーターのシードを設定します。
これは、必要に応じてアカウントのパスワードを再生成するための安全な方法ですか? 安全とは、私の秘密鍵が何であるかを誰かが知っているよりも脆弱ですか?
% Start with a blank slate
clear all
clc
% {url, #symbols, #upper, #lower, #numbers}
accounts = { ...
'www.foo.com', [3,3,3,3]; ...
'www.bar.com', [0,4,4,4]; ...
'www.box.com', [0,2,3,2]; ...
};
key = input('Secret Key: ', 's');
acc = input('Account Name (URL): ', 's');
% Clear display immediately
clc
% Allowed characters
s = { ...
'@#$%&*=+'; ... % symbols
'ABCDEFGHJKMNPQRSTUVWXYZ'; ... % upper
'abcdefghjkmnpqrstuvwxyz'; ... % lower
'123456789' }; % numbers
% Find matching accounts
idx = strfind(accounts(:,1), acc);
% Generate password for each matching account
for j = 1:length(idx)
if isempty(idx{j})
% Skip if there is no matching account
continue
end
% Salted random number generator seed
rng(sum([key, ': ', accounts{j,1}]), 'twister');
ns = accounts{j,2};
n = sum(ns);
% Construct password
p = '';
for k = 1:length(s)
v = s{k};
p = [p v(randi(length(v),1,ns(k)))];
end
p = p(randperm(n));
fprintf('Password for %s is %s\n', accounts{j,1}, p)
end
% Clear all variables for safety
clear all
たとえば、上記の私のプロトタイプは次のようになります
Password for www.foo.com is q*PZry4@8%3F
Password for www.bar.com is 8nZ8NWa6C8am
Password for www.box.com is wUw3Bn9
入力を使用して MATLAB コードを実行するたびに:
Secret Key: MySecretKey
Account Name (URL): www