CUBE SUGAR CONTAINER

技術系のこと書きます。

pwgen(1) でパスワードを生成する

コマンドラインで使えるパスワードジェネレータのひとつに pwgen(1) がある。 Unix 系の環境であれば、パッケージマネージャからインストールできることが多い。 今回は、そんな pwgen(1) の使い方について見ていく。

使った環境は次のとおり。

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.2 LTS"
$ uname -srm
Linux 5.15.0-75-generic aarch64
$ dpkg -l | grep pwgen
ii  pwgen                           2.08-2build1                            arm64        Automatic Password generation

もくじ

下準備

Ubuntu であれば APT を使ってインストールできる。

$ sudo apt-get -y install pwgen

使い方

ひとまず、オプションを何もつけずに pwgen(1) を実行してみよう。 すると、デフォルトでは大小の英数字で 8 文字のパスワードがずらっと出力される。

$ pwgen
ieGhach6 fieGie1g eiPhohd3 cie8ouPi Eeratah3 Gu1paet3 phoThuj0 EiXae7Vu
OoMeez6I que9Aebi oamaes5W aw4Eang7 Ab2or2oo ooj6ohGo Ja9sekaj Weey1iep
ad5Faib5 Iekoo3bo tiet9uK8 au4aeXei Aed3Fah1 eewei5Yi oV2iehai eipiew9V
letu0ooC ut5doh6H Angech3R aey4waiZ Cahs1ahn wii2Eibe eit8ieYe Biedoo4o
piebi9Zo eeNgei8f KeGh4ugh ko8eeK4O Beth8Eiy Gia4koNg phu1Tha1 eiSoo8fa
Niush4yo wohFo9wu Duo8AhN3 aisi7Foh Fo6gee9U vieG5tod eizoo4Ue akei5Aum
EeGach7m Eethei0e aiyai1Vo Eegh3kie eemeoJa7 zi3uiSha ieh0hoLo eeth3Ieb
ieL5ibie ooCh5xoo aiZ8Soth aemied2G Ahjie0ph aiNgaa6R OeSh2Goo ohPh5iph
kak8ohCh ieThi8oo ohs7Eixi too0aoTh aid2XieM eeF8ugah Kayah1ae ooGi4ihe
Gi1Kaek3 ooWohd3c ti5faiNg Eedooph2 thoo4Ue6 Aiqui6be Ookeuth6 choo9Phe
aizie0Oo aX3dei2d Iejoim6o Ra4yooBu ohWeey3x eith1aiT Eixi8Ahk OfiVah4O
ko6Neith thaeF9ak aephoo6E Faew7Jee ue2EceTu ahr0eSie phei5Si1 UJues7ah
shaiT4Ca imu7AGh9 gie2iLee xael2Oom xeg5Ieh6 Fiwoo3ou Aiph8jie yoo6eW0h
AeJah5in Um5LoWae Cahfie9R sia9Ohph aiD6zaiX veiW5ya6 ug6quuuY eequeW4j
pei8Hae5 ub5Nokeo Kei8iePh IeFai3ai oPhis0ei Lieg8tai Ohleed5I IeD0EiWu
popaiC6v xoov3aeK Iifea7so Ishoo1je cho5oaPa ei3eth0A Ein1quoo veeXoh7t
ogh0eeTi choh1Aez sie8Wae1 uanaim0I Huja7Ahb ia0sa3Ph ophiuCh4 Aimu1she
Aim9Oov5 ju9Xohle MohM8Ay0 uuS6Negh Kie4Kaif gahgh4Oo si6oraeP tool3Ool
uvaDiev9 tho0Tui5 HaiNah9w enos1oF1 eiqu2aeW Ohreu0Ai eih6aeX6 Aew2ifud
ZeiL5Qua ya1ouBei kieTh1ch Hoo1thee Cu1Eesh5 ahgh3Ait suquooK1 aph8Keax

デフォルトで英字は "pronounceable" (発音しやすさ) を考慮した出力がなされている点に注意する必要がある。 つまり、デフォルトの出力は覚えやすい代わりに辞書攻撃に対してセキュリティ強度が低下するというデメリットがある。

もし、完全にランダムな出力を得たい場合には -s オプションをつける必要がある。

$ pwgen -s
PfxhDbL8 D60fyRe3 2PALPTTE Dxt68AQm VLKMcWF2 J9ymuqCz SCdfQ4pL ZVXKuMY1
J6uvAFjv m9T9ydll IOEkWpO5 KjyHu11o xrdZRyp6 YGJNM268 lZ35WgKr vP4SMoTa
Ysjauhb7 vaIL5njg jmzVi37R B0U4R9fw cx6yRFzC Mhg8AeRP 2RRGccgD Qcdd8LmH
T0OQO26J U664NXae e4niOosB xZjmcby9 Gsg6NYwV MdD6K18f 6hihKk78 eH2gn5SR
WWv5rCCO 0XiaTElf R6xy7KyO FiibEa8F xVeR2BvJ 6YX5nvrN KixtlDr3 fl5c2yIu
iZExiwN1 yDsA7sCT eWaR77oU 99lvthJb TJ1vpNR3 lZR0EoE5 f7BQKtU8 vZRXq758
uZxad47N S40oIx3O LwFppL7X WFxK8Fe9 8I4wLH8P d4cKsWos Zrh7Rzfs krB4YJCw
B59MiZHE K9XGjcA6 6tKAWCNm sdXn2RHR 9RmsK2wE jS6dalEA RH1vCYoW pwuqf8Zx
7DjNUfxH oStVpMA8 A21AJIbM 5R4rl33M Y8abPkY0 4PtCMWVo Pwot8b8a LT5KIXZc
j2GnMRBA HQ9sWA3m NI8iUq5U 9HxvYNqZ 5hHGcox7 NhdI4yLh m6U6Qg6G RWM6AL83
kz9J0DHP s4yOTMEk pD3uIcxR uYtsd6NK jdfcVAo1 18Nhr7t4 VGYCt2YM 5pKNubLj
TSDEjzK5 THcd2szg 3Y1KpYoj dp3u4BF6 Et5XYJCP 9gwsQUai aY6InIC7 XxiTtBA5
iITc9kJ9 qiA4goIx iwhaeg9J 4v3MOKSJ I4Jco3QJ 5UQuOhJe GXMBaL8n Zt71eEcd
uaicDa2l XD6CM7Am FFi1NUZM HPhMVtN5 gh4xIpTW yy5o0VQf oQ2r3Zyi E0nrsgBy
1R5MpIbV 7xj0JTqn nBl9nT0K VCLfvLV3 S4E7aOfq nPeFCti9 mygjUI5t gHb8Cc9I
xL47NyId l9RaLqp3 3mBIausn TZ3RbWWX ghWW1Rao w9MQl45W Bt98S11E gD3AODFn
tAoXLba3 jj66yVMv iZehQc3K qiMIJO6v E44Q0UAQ 3eMLZeep Uq9FJLPX Lfx5cEwi
x5Pcr7mN rSHY25Ht hbizDB2o MimAeV8g ZOYj5Ac9 05x8naXm PPu9IcKA tvOj5FPR
EH7SOpKo uemJope4 5QNJ89SH yPHiFVw4 3LlX9e3x 94YDtZgr vmsZYSk7 T2pEX4lK
dGoH6BFJ qkHtx50l EDD9H1qI Wpbv7xgE VrBDRtB2 rM7fiBAC Hn3VIgW9 fqmZPG8t

また、デフォルトで出力される 8 文字というパスワード長は、現在の計算機環境を考えると短い。 そのため、もっと長いパスワードが得たい場合には引数として数字を指定する。 さらに、その後続にも数字を指定すると出力する候補の数を指定できる。 たとえば 20 文字のパスワードが 6 つほしい場合は次のとおり。

$ pwgen -s 20 6
nAS10xMlrX0F3uja7g6O IbYojr0FPfKIZS4sCHqp Uh1YCdxaqSuOZ9d3fo5y
fWh7skWJBuLN9mxqZ2Mp 37gpHst5V3URI36N0w9E 9KNA9T3eNKwsy1RfAm6W

また、デフォルトではパスワードに記号が含まれない。 含まれるようにしたい場合は -y オプションをつける。

$ pwgen 20 6 -s -y
(6!84GBprv=[}E|(h{;k k6xoEpY#o|jw*5>BN{/: }7l~Vd"C&*r.DPs^r|DE
H&QYCgW\/PrQsT~H2db! 6GoDIc7k>+e~V@kD,_C4 Rlrc{m0.RG+Bqj44wH&y

反対に、使われる文字種で大文字を含めたくない (小文字だけにしたい) 場合は -A オプションをつける。

$ pwgen 20 6 -s -A
n1o8hc5cmstr1jw4097d 7h1i89dp524govqdl3yr 0euk0nes4c2kuro1iz6w
1r52jrupu7a1dwvgjmph 79f3z9x774aat8w69hlh djc2zqi34ng5xkof056l

同様に、使われる文字種で数字を含めたくない場合は -0 オプションをつける。

$ pwgen 20 6 -s -0
pBtuZkTXfpjzvOKKDloE cetdXAYfJzMZPClOeBMI xHoLNcKPTZAFWYrvkFsQ
NZBcNrFdAbkOxOATEsob UwmTvyUoiyRUcabLMQEA dqpdUNdJbxJLttuolZtP

1l など、まぎらわしい文字を使わないようにするには -B オプションが利用できる。 ただし、文字種が減ることで視認性が上がる代わりにセキュリティ強度が低下するため、このオプションは基本的には推奨されていないようだ。

$ pwgen 20 6 -s -B
qgKkCnAPX3nVFEYFWkJ7 ikh9pnkvtWgxNb3TLzm7 sUHK4kyoLChj4VYJpNdf
EgTAfRNegJKU4Cmvbxe4 gyjsRwczWyWLdn3Xj4sq CtPsiHfV7m9qCweiXyiL

いじょう。