事例のご紹介|CoSort

データ保護サンプル CoSort SortCL Job Samples:

証券会社での利用例――SortCLによるフィールドレベルの個人データ保護

この例では、暗号化、偽名化、非識別化による個人データフィールドの保護と、 元データフィールドの復元を行っています。
さらに、次の処理も同時に行っています。

  • 会社コードでのソートとジョイン
  • フィールドの再マッピング
  • 条件による行のクロス計算
  • 集計と整順化

入力ファイルがどのようにして同時的に変換されるのかに注目してください。

1. 個人データフィールドの保護(暗号化、偽名化、非識別化)

入力ファイル1:tousyo-a (1行目の見出し行を除くタブ区切りファイルを入力ファイルとする。)

会社名 会社コード 終値 出来高 前日比 %
極洋 1301 217 201000 1 0.46
ニチロ 1331 - 0 - -
日本水産 1332 647 2277300 -7 -1.07
マルハグループ本社 1334 191 2205000 1 0.53
ホウスイ 1352 160 12000 0 0
サカタのタネ 1377 1552 35000 6 0.39
ホクト 1379 1889 117800 -22 -1.15
住友石炭鉱業 1503 115 6342000 2 1.77
日鉄鉱業 1515 927 173000 10 1.09
三井松島産業 1518 183 783000 1 0.55
関東天然瓦斯開発 1661 737 88000 10 1.38
石油資源開発 1662 8060 100500 91 1.13
ハザマ 1719 137 107800 1 0.74
東急建設 1720 597 233680 13 2.23
コムシスホールディングス 1721 1249 855000 -19 -1.5
ミサワホームホールディングス 1722 1164 286500 4 0.34
高松建設 1762 1545 6600 4 0.26
東建コーポレーション 1766 5840 46900 -60 -1.02
ヤマウラ 1780 340 6500 8 2.41
オリエンタル建設 1786 332 25000 5 1.53
みらい建設グループ 1792 11 6055000 0 0
大成建設 1801 336 4736000 -4 -1.18
大林組 1802 567 5495000 6 1.07
清水建設 1803 600 4247000 5 0.84
飛島建設 1805 60 3803000 -1 -1.64
長谷工コーポレーション 1808 291 13183500 -3 -1.02
松井建設 1810 510 12000 4 0.79
鹿島 1812 393 6261000 1 0.26
不動建設 1813 178 24942500 20 11.25
大末建設 1814 82 153000 0 0
鉄建 1815 178 98000 0 0
安藤建設 1816 202 27000 -1 -0.49
太平工業 1819 671 248000 -6 -0.89
西松建設 1820 356 1817000 -3 -0.84
三井住友建設 1821 198 205300 1 0.51
大豊建設 1822 188 77000 0 0
前田建設工業 1824 422 1397000 -1 -0.24
佐田建設 1826 134 91000 -1 -0.74
ナカノフドー建設 1827 305 34500 -1 -0.33
奥村組 1833 588 1115000 -1 -0.17
小田急建設 1834 268 2500 1 0.37
東鉄工業 1835 736 24000 -13 -1.74
真柄建設 1839 166 129000 0 0
イチケン 1847 299 79000 -1 -0.33
淺沼組 1852 181 25000 0 0

入力ファイル2:buys (1行目の見出し行を除く固定長ファイルを入力ファイルとする。氏名は漢字スペースで5文字に統一する。)

株数 会社コード 個人コード 氏名
1000 1301 365-57-7505 吉田茂
950 1503 762-25-9601 片山哲
25000 1623 128-61-1131 芦田均
3250 1426 129-69-2156 鳩山一郎
775 1563 108-46-1219 石橋湛山
400 1766 562-21-6485 岸信介
2100 1518 578-52-7911 池田勇人
950 1801 467-12-5544 佐藤榮作
1500 1662 617-51-7283 田中角榮
5000 1815 583-14-2464 三木武夫
3333 1852 449-30-6343 福田赳夫
2000 1802 765-85-6704 大平正芳
8500 1315 311-23-8269 鈴木善幸
1000 1503 533-97-5223 中曽根康弘
4300 1515 601-13-7610 竹下登
9000 1379 270-71-5951 宇野宗佑
3500 1821 254-66-0751 海部俊樹
825 1334 373-37-4567 宮澤喜一
9000 1834 259-21-9896 細川護煕
855 1736 377-63-7162 羽田孜
50 1806 474-82-4342 村山富市
90 1808 277-76-0741 橋本龍太郎

偽名化セットファイル:pseudo.set

吉田茂  

宇喜多直家

片山哲  

伊達政宗 

芦田均  

井伊直政 

鳩山一郎 

小早川隆景

石橋湛山 

武田信玄 

岸信介  

島津貴久 

池田勇人 

南部晴政 

佐藤榮作 

南部信直 

田中角榮 

蠣崎季広 

三木武夫 

河尻秀隆 

福田赳夫 

尼子経久 

大平正芳 

馬場信春 

鈴木善幸 

井伊直虎 

中曽根康弘

中村一氏 

竹下登  

島津家久 

宇野宗佑 

坂崎直盛 

海部俊樹 

毛利元就 

宮澤喜一 

小平季遠 

細川護煕 

北条氏綱 

羽田孜  

堀尾吉晴 

村山富市 

前田利家 

橋本龍太郎

蒲池鑑盛 

/*Unknown*/

 

CoSortのSortCLジョブスクリプト(個人データフィールドを保護する)

# Produce trade summary results and secure sensitive data # Load encryption library
# Encode: UTF-8
#/LOCALE=ja_JP.utf8
/LIBRARY="$COSORT_HOME/lib/libcscrypt.so"
/INFILE=tousyo-a # tab-delimited format
/ALIAS=tse /FIELD=(Issue,POS=1,SEP='\t')
/FIELD=(Symbol,POS=2,SIZE=4,SEP='\t')
/FIELD=(LastTrade,POS=3,SIZE=5,SEP='\t',NUMERIC)
/FIELD=(Volume,POS=4,SEP='\t',NUMERIC)
/FIELD=(Change,POS=5,SIZE=6,SEP='\t', NUMERIC)
/FIELD=(Percent,POS=6,SIZE=4.2,SEP='\t', NUMERIC)
/INFILE=buys # fixed-position format
/ALIAS=buys /FIELD=(Shares,POS=1,SIZE=5)
/FIELD=(Symbol,POS=9,SIZE=4)
/FIELD=(ssno,POS=16,SIZE=11)
/FIELD=(Client,POS=30,SIZE=15)
# /FIELD=(CRLF,POS=43,SIZE=2)
/JOIN FULL_OUTER NOT_SORTED tse NOT_SORTED buys WHERE tse.Symbol EQ buys.Symbol
/OUTFILE=Secure_trades_u # summary record format
/HEADREC=" -----------\n"
/FIELD=(New_balance,POS=75,SIZE=10.0,MIL,NUMERIC)
/SUM New_balance from (tse.LastTrade * buys.Shares) # expression
/OUTFILE=Secure_trades_u # detail record format
# /HEADREC="Client SS# Symbol Shares LastTrade Shares*LT Ln.\n\n"
/HEADREC="顧客 ID# 銘柄コード 株数 終値 株数*終値 Ln.\n\n"
# If not empty, provide pseudonym for the Clients from SET file:
/FIELD=(pseudo_name,SET=pseudo_set.utf8[buys.Client],SIZE=15)
/FIELD=(name,POS=1,IF buys.Client EQ " " THEN {5}" " ELSE psuedo_name)
# If not empty, encrypt ssno field with AES256:
/FIELD=(encrypted_ssno,POS=20,IF ssno EQ " " THEN "" ELSE encryptAES256(ssno))
# If not empty, de-identify symbol fields:
/FIELD=(deid_symbol1,POS=46,IF buys.Symbol EQ " " THEN "" ELSE de_identify(buys.Symbol,"abc"))
/FIELD=(deid_symbol2,POS=52,IF tse.Symbol EQ " " THEN "" ELSE de_identify(tse.Symbol,"abc"))
/FIELD=(buys.Shares,POS=61,SIZE=5)
/FIELD=(tse.LastTrade,POS=71,SIZE=5.0,NUMERIC)
# If records match, calculate last trade * volume:
/FIELD=(product,POS=80,SIZE=10.0,MIL,NUMERIC,IF tse.Symbol NE buys.Symbol THEN {9} " " ELSE tse.LastTrade * buys.Shares)
/FIELD=(Sequencer,POS=92,SIZE=4) # discussion reference nb

安全な出力ファイル secure_trades:(氏名は偽名化、個人コードは暗号化、会社コードは識別不能化されている)

  

顧客

個人コード

会社

銘柄コード

株数

終値

株数*終値

Ln.

宇喜多直家

HZxxfOODiWH7/7PkgZZjXw==

5635

5635

1000

217

217,000

1

井伊直虎

b+zJGvdsQR9C3u7VIil4Vg==

5657

 

8500

0

0

2

    

   

5665

 

0

0

3

     

   

5664

 

647

0

4

小平季遠

wPubF1zFWJiueB4VZr6KyA==

5668

5668

825

191

157,575

5

     

   

5674

 

160

0

6

     

   

56;;

 

1552

0

7

坂崎直盛

d+SOp4f83fU+5LQqY5sC6w==

56;<

56;<

9000

1889

17,001,000

8

小早川隆景

CQ93rhKKFRnfCvfPC1OVRQ==

5849

 

3250

0

0

9

伊達政宗

Gs4ZT/HqcFhwc2g4oEsezQ==

5736

5736

950

115

109,250

10

中村一氏

Tl/RPFMUyY26vccjossBrQ==

5736

5736

1000

115

115,000

11

島津家久

kluZQY9h5ntH7NpeDhQ+Mw==

5757

5757

4300

927

3,986,100

12

南部晴政

pI2bZgAGWJlGWenfXL30Ng==

575:

575:

2100

183

384,300

13

武田信玄

a+r9AyZdz1GwaJmQ3vRvAQ==

5796

 

775

0

0

14

井伊直政

NDE7/5fbf9md3kRP3Lwt+g==

5946

 

25000

0

0

15

     

 

5995

   

737

0

16

蠣崎季広

1OT7tR0oQwioioEC8p8GiA==

5994

5994

1500

8060

12,090,000

17

     

   

5;5<

 

137

0

18

      

   

5;43

 

597

0

19

     

   

5;45

 

1249

0

20

     

   

5;44

 

1164

0

21

堀尾吉晴

2/cjA7wkt9/1kyWNZYJZRQ==

5;69

 

855

0

0

22

     

   

5;94

 

1545

0

23

島津貴久

zkHcJfLxfz6PTlMICrqbDg==

5;99

5;99

400

5840

2,336,000

24

     

   

5;:3

 

340

0

25

     

   

5;:9

 

332

0

26

     

   

5;<4

 

11

0

27

南部信直

hKJuvbgr8OIvpQKUx7hw9w==

5:35

5:35

950

336

319,200

28

馬場信春

j6VyS6bbXYgatYL5JIFLZA==

5:34

5:34

2000

567

1,134,000

29

     

   

5:36

 

600

0

30

     

   

5:37

 

60

0

31

前田利家

6P2018n88pvpR7N1dp9NaA==

5:39

 

50

0

0

32

蒲池鑑盛

hJsLLCvljbyOLOLTTfPIhg==

5:3:

5:3:

90

291

26,190

33

     

   

5:53

 

510

0

34

     

   

5:54

 

393

0

35

     

   

5:56

 

178

0

36

     

   

5:58

 

82

0

37

河尻秀隆

qc9F6oLKCTEENci3lAHyvg==

5:57

5:57

5000

178

890,000

38

     

   

5:59

 

202

0

39

     

   

5:5<

 

671

0

40

     

   

5:43

 

356

0

41

毛利元就

CV6RCAc/6nxRydcixw2TvA==

5:45

5:45

3500

198

693,000

42

     

   

5:44

 

188

0

43

     

   

5:48

 

422

0

44

     

   

5:49

 

134

0

45

     

   

5:4;

 

305

0

46

     

   

5:66

 

588

0

47

北条氏綱

WOl6ZTkEdDv+S6rhGkzHXw==

5:68

5:68

9000

268

2,412,000

48

     

   

5:67

 

736

0

49

     

   

5:6<

 

166

0

50

     

   

5:8;

 

299

0

51

尼子経久

oN+O2F3dsKMSxiyzuEfK+w==

5:74

5:74

3333

181

603,273

52

           

-----------

 
           

42,473,888

 
トップに戻る

2. 元のフィールドを復元する(復号化、実名化、再識別化)

実名化セットファイル:pseudo_restore.set

宇喜多直家

吉田茂  

伊達政宗 

片山哲  

井伊直政 

芦田均  

小早川隆景

鳩山一郎 

武田信玄 

石橋湛山 

島津貴久 

岸信介  

南部晴政 

池田勇人 

南部信直 

佐藤榮作 

蠣崎季広 

田中角榮 

河尻秀隆 

三木武夫 

尼子経久 

福田赳夫 

馬場信春 

大平正芳 

井伊直虎 

鈴木善幸 

中村一氏 

中曽根康弘

島津家久 

竹下登  

坂崎直盛 

宇野宗佑 

毛利元就 

海部俊樹 

小平季遠 

宮澤喜一 

北条氏綱 

細川護煕 

堀尾吉晴 

羽田孜  

前田利家 

村山富市 

蒲池鑑盛 

橋本龍太郎

/*Unknown*/

 

CoSortのSortCLジョブスクリプト(元のフィールドを復元する)

# Restore original values and produce trade summary results
# Load encryption library
/LIBRARY="$COSORT_HOME/lib/libcscrypt.so"
/INFILE=Secure_trades
/INCOLLECT=52 # omit summary fields from Secure_trades output
/INSKIP=2 # omit header from Secure_trades output
# define the layout of Secure_trades detail records:
/FIELD=(Client,POS=1,SIZE=15)
/FIELD=(Client_flag,POS=1,SIZE=3)
/FIELD=(ssno,POS=20,SIZE=24)
/FIELD=(ssno_flag,POS=20,SIZE=1)
/FIELD=(buys_Symbol,POS=46,SIZE=4)
/FIELD=(tse_Symbol,POS=52,SIZE=4)
/FIELD=(Shares,POS=61,SIZE=5)
/FIELD=(LastTrade,POS=71,SIZE=5.0,NUMERIC)
/FIELD=(product,POS=80,SIZE=10.0,NUMERIC)
/FIELD=(Sequencer,POS=92,SIZE=4)
/REPORT
/OUTFILE=Restore_trades # summary record format
/HEADREC=" -----------\n"
/FIELD=(New_balance,POS=63,MIL,SIZE=14)
/SUM New_balance from (LastTrade * Shares) # expression
/OUTFILE=Restore_trades # detail record format
/HEADREC="氏名 個人コード 会社コード 株数 終値 株数*終値 Ln.\n\n"
# If not empty, restore original Clients from the pseudo_restore SET file
/FIELD=(T,SET= pseudo_restore.set[Client],POS=1,SIZE=15)
/FIELD=(restore_Client,POS=1,IF Client_flag EQ " " THEN {5}" " ELSE T)
# If not empty, decrypt the ssno field using AES256 decryption:
/FIELD=(restore_ssno,POS=20,SIZE=11,IF ssno_flag EQ " " THEN {11}" " ELSE decryptAES256(ssno))
# If not empty, re-identify symbol fields:
/FIELD=(restore_buys_symbol,POS=34,IF buys_symbol EQ " " THEN "" ELSE re_identify(buys_symbol,"abc"))
/FIELD=(restore_buys_symbol,POS=40,IF tse_symbol EQ " " THEN "" ELSE re_identify(tse_symbol,"abc"))
/FIELD=(Shares,POS=51,SIZE=8.0)
/FIELD=(LastTrade,POS=61,SIZE=8.0,NUMERIC)
/FIELD=(product,POS=70,SIZE=12.0)
/FIELD=(Sequencer,POS=84)

出力ファイル restore_trades:(氏名、個人コード、会社コードが復元されている)

氏名

個人コード

会社コード

株数

終値?

株数*終値

?Ln.

吉田茂

365-57-7505

1301

1301

1000

217

217,000

1

鈴木善幸

311-23-8269

1315

 

8500

0

0

2

     

1331

 

0

0

3

     

1332

 

647

0

4

宮澤喜一

373-37-4567

1334

1334

825

191

157,575

5

     

1352

 

160

0

6

     

1377

 

1552

0

7

宇野宗佑

270-71-5951

1379

1379

9000

1889

17,001,000

8

鳩山一郎

129-69-2156

1426

 

3250

0

0

9

片山哲

762-25-9601

1503

1503

950

115

109,250

10

中曽根康弘

533-97-5223

1503

1503

1000

115

115,000

11

竹下登

601-13-7610

1515

1515

4300

927

3,986,100

12

池田勇人

578-52-7911

1518

1518

2100

183

384,300

13

石橋湛山

108-46-1219

1563

 

775

0

0

14

芦田均

128-61-1131

1623

 

25000

0

0

15

     

1661

 

737

0

16

田中角榮

617-51-7283?

1662

1662

1500

8060

12,090,000

17

     

1719

 

137

0

18

     

1720

 

597

0

19

     

1721

 

1249

0

20

     

1722

 

1164

0

21

羽田孜

377-63-7162

1736

 

855

0

0

22

     

1762

 

1545

0

23

岸信介

562-21-6485

1766

1766

400

5840

2,336,000

24

     

1780

 

340

0

25

     

1786

 

332

0

26

     

1792

 

11

0

27

佐藤榮作

467-12-5544

1801

1801

950

336

319,200

28

大平正芳

765-85-6704

1802

1802

2000

567

1,134,000

29

     

1803

 

600

0

30

     

1805

 

60

0

31

村山富市

474-82-4342

1806

 

50

0

0

32

橋本龍太郎

277-76-0741

1808

1808

90

291

26,190

33

     

1810

 

510

0

34

     

1812

 

393

0

35

     

1813

 

178

0

36

     

1814

 

82

0

37

三木武夫

583-14-2464

1815

1815

5000

178

890,000

38

     

1816

 

202

0

39

     

1819

 

671

0

40

     

1820

 

356

0

41

海部俊樹

254-66-0751

1821

1821

3500

198

693,000

42

     

1822

 

188

0

43

     

1824

 

422

0

44

     

1826

 

134

0

45

     

1827

 

305

0

46

     

1833

 

588

0

47

細川護煕

259-21-9896

1834

1834

9000

268

2,412,000

48

     

1835

 

736

0

49

     

1839

 

166

0

50

     

1847

 

299

0

51

福田赳夫

449-30-6343

1852

1852

3333

181

603,273

52

           

?-----------

             

42,473,888

 
トップに戻る