sha256とsha512

SHA–256は入力値ごとに固有のハッシュ値を生成することにより、データの完全性などをチェックするために用いられる

$original_string = "パスワード";
$hashed_string = hash('sha256', $original_string);
print_r($hashed_string);

$ php index.php
d8b076148c939d9d2d6eb60458969c486794a4c0fcf0632be58fa5bf6d15aafa

$original_string = "パスワード";
$hashed_string = hash('sha512', $original_string);
print_r($hashed_string);

e2f8de62a90c1e3039cba62afb7646401ca5fbd97ec4ef3fbada4752aeafd022cfa7eafda320d08b2df6a0a6e55f0d62b5967081792095d7eaafc58d00533283

512にすると倍になってますね。

メッセージ認証符号MAC(Message Authentication Code)

MACはデータの完全性を保証するための仕組み

1.初期化:事前に秘密鍵sを決めて共有しておく 
2.MAC生成: データmと秘密鍵sからMAC生成関数を使ってMAC値tと呼ばれる値を作り、データmと一緒にMAC値tをボブに送る
3.検証: 共有しておいた秘密鍵sと受け取ったデータmからMAC生成関数を使ってMAC値tを計算する
       L MAC値tが一致していればデータmを正常に受信できたとして受理(accept)、そうでなければ不正としてreject

楕円曲線暗号(elliptic curve cryptography)

ECDHP:(P, aP, bP)が与えられた時にabPを求めよ
楕円離散対数問題(ECDLP): P, Aが与えられた時にA=aPとなるaを求めよ
ECDHPやECDLPが難しいとされている
楕円曲線を用いたDH鍵共有がECDH鍵共有

### 中間者攻撃
アリスとボブの間に入って、秘密鍵s, 公開鍵Sのうち、公開鍵Sを書き換える
Dec(s, c) = m
Enc(B, m) = c’

PHPの論理和、論理積、排他的論理和

論理積 and
論理和 or
排他的論理和 xor
否定 !
論理積 &&
論理和 ||

if(TRUE and TRUE) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

$a = 1;
$b = 2;
if(($a === 1) and ($b === 2)) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";


if(TRUE and FALSE) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

$a = 1;
$b = 2;
if(($a === 1) and ($b === -2)) echo  "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";


if(TRUE or FALSE) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

$a = 1;
$b = 2;
if(($a === 1) or ($b === -2)) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

// 片方TRUEで両方TRUEではない
if(TRUE xor FALSE) echo  "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

$a = 1;
$b = 2;
if(($a  + $b === 3) xor ($b - $a === -1)) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";


// 否定
if(!FALSE) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

$a = 1;
$b = 2;
if(!($a + $b === -3)) echo "結果はTRUEです。<br>\n"; else echo "結果はFALSEです。<br>\n";

RDS インスタンスタイプの決め方

db.r5.large などの表記で記載されているが、「r5」の部分がインスタンスタイプ、「large」がインスタンスサイズ

インスタンスタイプは、r系、m系、t系などがある。rdsもt系とm系が汎用で、t系はバースト可能クラス

### r系
・メモリ内の大きいデータセットを処理するワークロードに対して高速なパフォーマンスを実現するように設計されているメモリ最適化インスタンスに属するr系
・r6g.largeのような世代の数字の後ろにgのような文字がついているタイプは追加機能(gならばAWS Gravitonプロセッサ(最良のコストパフォーマンスを提供))
・small < medium < large < xlarge < 2xlarge < 4xlarge < ・・・ なるほど、用途で選ぶのね。

SSL Library Error: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small AH00016: Configuration Failed

$ sudo less /var/log/httpd/error_log
SSL Library Error: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small AH00016: Configuration Failed

キーが短すぎるの意味がそのままで、今は1024bitだと短いと判断されるらしい。
2048で作り直す必要がある。

うーん、前途多難だな

[Docker] Redmineのコンテナを作成してみよう

### 作成手順
ネットワークを作る -> MySQLコンテナを作る -> Redmineコンテナを作る -> 確認 -> 後始末
※WordPressとほぼ同じ構成だがオプションの名前が異なる

$ sudo docker network create redmine000net2
$ sudo docker run –name mysql000ex13 -dit –net=redmine000net2 -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=redmine000db -e MYSQL_USER=redmine000kun -e MYSQL_PASSWORD=rkunpass mysql –character-set-server=utf8mb4 –collation-server=utf8mb4_unicode_ci –default-authentication-plugin=mysql_native_password
$ sudo docker run -dit –name redmine000ex14 –network redmine000net2 -p 8086:3000 -e REDMINE_DB_MYSQL=mysql000ex13 -e REDMINE_DB_DATABASE=redmine000db -e REDMINE_DB_USERNAME=redmine000kun -e REDMINE_DB_PASSWORD=rkunpass redmine

うおおおおおお
何これ?

[Docker] Postfixを実装したい

Dockerfile

FROM ubuntu:20.04

RUN apt update && apt upgrade -y

# postfix install
RUN DEBIAN_FRONTEND=noninteractive apt install postfix -y

# SMTPにはSMTP AUTHが必要
# SMTP AUTHの為のSASLにはCyrus SaslとCyrus IAMPを使う
RUN apt install sasl2-bin -y
RUN DEBIAN_FRONTEND=noninteractive apt install cyrus-imapd -y

# コンテナ起動のスクリプト
COPY ./entrypoint.sh /
ENTRYPOINT ["sh", "/entrypoint.sh"]

docker-compose.yml

version: '3.3'
services:
  docker-ubuntu-postfix-example:
    build:
      context: ./
      dockerfile: Dockerfile
    image: docker-ubuntu-postfix-example-image:latest
    container_name: docker-ubuntu-postfix-example-container
    volumes:
      # Postfixの設定をマウントする
      - type: bind
        source: ./configs/main.cf
        target: /etc/postfix/main.cf
      # SASL認証のパスワードをマウントする
      - type: bind
        source: ./configs/sasl_passwd
        target: /etc/postfix/sasl_passwd

entrypoint.sh

#!/bin/bash

# postfix起動
postfix start

# Postfixは/var/spool/postfixにchrootするので、
# /etc/resolv.confではなく/var/spool/postfix/etc/resolv.confを見に行く。

cp /etc/resolv.conf /var/spool/postfix/etc/resolv.conf

# SASL認証用テーブル作成
chown root:root /tec/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

# postfixの設定を反映させる
postfix reload

# コンテナの起動を維持
tail -f /dev/null

configs/main.cf
L postfixを使う場合

# ログの出力設定
mainlog_file = /var/log/mail.log

# SMTPリレーの設定
relayhost = [smtp.mailtrap.io]:2525
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = plain 
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd

configs/sasl_passwd
-> postfixのcredential情報

<メールサーバのFQDN>]:587 <ユーザ名>:<パスワード> #★

$ sudo docker-compose build –no-cache
$ sudo docker-compose up -d
$ sudo docker exec -it docker-ubuntu-postfix-example-container /bin/bash

root@7b16a3765167:/# sendmail your-email@example.com
From:your-email@example.com
To:your-email@example.com
Subject:Hello World

Hello World
.