[{"data":1,"prerenderedAt":1694},["ShallowReactive",2],{"navigation_docs":3,"-projetos-integradores-pi-02-gerador-senhas":252,"-projetos-integradores-pi-02-gerador-senhas-surround":1690},[4,96,189],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"⚙️ Engenharia de Software","i-lucide-book-open","\u002Fengenharia-software","1.engenharia-software",[10,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92],{"title":5,"path":7,"stem":11},"1.engenharia-software\u002Findex",{"title":13,"path":14,"stem":15},"📋 Plano de Ensino e Aplicações","\u002Fengenharia-software\u002Fengenharia-software-aplicacoes","1.engenharia-software\u002F01.engenharia-software-aplicacoes",{"title":17,"path":18,"stem":19},"Cap 01: Introdução e Natureza do Software","\u002Fengenharia-software\u002Fcap-01","1.engenharia-software\u002F02.cap-01",{"title":21,"path":22,"stem":23},"Cap 02: Modelos de Processo de Software","\u002Fengenharia-software\u002Fcap-02","1.engenharia-software\u002F03.cap-02",{"title":25,"path":26,"stem":27},"Cap 03: As Atividades do Processo","\u002Fengenharia-software\u002Fcap-03","1.engenharia-software\u002F04.cap-03",{"title":29,"path":30,"stem":31},"Cap 04: Metodologias Ágeis","\u002Fengenharia-software\u002Fcap-04","1.engenharia-software\u002F05.cap-04",{"title":33,"path":34,"stem":35},"Cap 05: Fundamentos de Requisitos","\u002Fengenharia-software\u002Fcap-05","1.engenharia-software\u002F06.cap-05",{"title":37,"path":38,"stem":39},"Cap 06: Elicitação e Levantamento","\u002Fengenharia-software\u002Fcap-06","1.engenharia-software\u002F07.cap-06",{"title":41,"path":42,"stem":43},"Cap 07: Especificação de Requisitos (ERS)","\u002Fengenharia-software\u002Fcap-07","1.engenharia-software\u002F08.cap-07",{"title":45,"path":46,"stem":47},"Cap 08: Validação e Gestão","\u002Fengenharia-software\u002Fcap-08","1.engenharia-software\u002F09.cap-08",{"title":49,"path":50,"stem":51},"Cap 09: Fundamentos da Modelagem","\u002Fengenharia-software\u002Fcap-09","1.engenharia-software\u002F10.cap-09",{"title":53,"path":54,"stem":55},"Cap 10: Diagrama de Casos de Uso (Conceitos)","\u002Fengenharia-software\u002Fcap-10","1.engenharia-software\u002F11.cap-10",{"title":57,"path":58,"stem":59},"Cap 11: Casos de Uso (Prática e Relações)","\u002Fengenharia-software\u002Fcap-11","1.engenharia-software\u002F12.cap-11",{"title":61,"path":62,"stem":63},"Cap 12: Diagrama de Classes (Conceitos)","\u002Fengenharia-software\u002Fcap-12","1.engenharia-software\u002F13.cap-12",{"title":65,"path":66,"stem":67},"Cap 13: Herança e Polimorfismo","\u002Fengenharia-software\u002Fcap-13","1.engenharia-software\u002F14.cap-13",{"title":69,"path":70,"stem":71},"Cap 14: Diagrama de Sequência","\u002Fengenharia-software\u002Fcap-14","1.engenharia-software\u002F15.cap-14",{"title":73,"path":74,"stem":75},"Cap 15: Diagramas Dinâmicos (Estados e Atividades)","\u002Fengenharia-software\u002Fcap-15","1.engenharia-software\u002F16.cap-15",{"title":77,"path":78,"stem":79},"Cap 16: Qualidade de Software (SQA)","\u002Fengenharia-software\u002Fcap-16","1.engenharia-software\u002F17.cap-16",{"title":81,"path":82,"stem":83},"Cap 17: Estratégias de Teste","\u002Fengenharia-software\u002Fcap-17","1.engenharia-software\u002F18.cap-17",{"title":85,"path":86,"stem":87},"Cap 18: Manutenção e Evolução","\u002Fengenharia-software\u002Fcap-18","1.engenharia-software\u002F19.cap-18",{"title":89,"path":90,"stem":91},"Cap 19: Gerência de Configuração (SCM)","\u002Fengenharia-software\u002Fcap-19","1.engenharia-software\u002F20.cap-19",{"title":93,"path":94,"stem":95},"Cap 20: Conclusão e Próximos Passos","\u002Fengenharia-software\u002Fcap-20","1.engenharia-software\u002F21.cap-20",{"title":97,"icon":98,"path":99,"stem":100,"children":101},"🛠️ Atividades","i-lucide-wrench","\u002Fatividades","2.atividades",[102,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185],{"title":103,"path":99,"stem":104},"📋 Orientações Gerais","2.atividades\u002Findex",{"title":106,"path":107,"stem":108},"📅 Cronograma","\u002Fatividades\u002Fcronograma","2.atividades\u002F01.cronograma",{"title":110,"path":111,"stem":112},"✏️ Atividade 01: Escopo e Personas","\u002Fatividades\u002Fatv-01-escopo","2.atividades\u002F02.atv-01-escopo",{"title":114,"path":115,"stem":116},"⚙️ Atividade 02: Processos de Software","\u002Fatividades\u002Fatv-02-processos","2.atividades\u002F03.atv-02-processos",{"title":118,"path":119,"stem":120},"📋 Atividade 03: Engenharia de Requisitos","\u002Fatividades\u002Fatv-03-requisitos","2.atividades\u002F04.atv-03-requisitos",{"title":122,"path":123,"stem":124},"📝 Atividade 04: User Stories e Backlog","\u002Fatividades\u002Fatv-04-backlog","2.atividades\u002F05.atv-04-backlog",{"title":126,"path":127,"stem":128},"🎭 Atividade 05: Casos de Uso (UML)","\u002Fatividades\u002Fatv-05-casos-uso","2.atividades\u002F06.atv-05-casos-uso",{"title":130,"path":131,"stem":132},"🖼️ Atividade 06: Prototipagem e Wireframes","\u002Fatividades\u002Fatv-06-prototipagem","2.atividades\u002F07.atv-06-prototipagem",{"title":134,"path":135,"stem":136},"🏛️ Atividade 07: Diagrama de Classes (UML)","\u002Fatividades\u002Fatv-07-classes","2.atividades\u002F08.atv-07-classes",{"title":138,"path":139,"stem":140},"🔀 Atividade 08: Diagrama de Sequência (UML)","\u002Fatividades\u002Fatv-08-sequencia","2.atividades\u002F09.atv-08-sequencia",{"title":142,"path":143,"stem":144},"🧪 Atividade 09: Qualidade e Testes","\u002Fatividades\u002Fatv-09-testes","2.atividades\u002F10.atv-09-testes",{"title":146,"path":147,"stem":148},"🏁 Atividade 10: Projeto Integrador Final","\u002Fatividades\u002Fatv-10-projeto-final","2.atividades\u002F11.atv-10-projeto-final",{"title":150,"path":151,"stem":152},"📊 Atividade 11: Diagrama de Atividades (UML)","\u002Fatividades\u002Fatv-11-atividades","2.atividades\u002F12.atv-11-atividades",{"title":154,"path":155,"stem":156},"🔄 Atividade 12: Diagrama de Transição de Estados (UML)","\u002Fatividades\u002Fatv-12-estados","2.atividades\u002F13.atv-12-estados",{"title":158,"path":159,"stem":160},"🏗️ Atividade 13: Arquitetura de Software e Padrões","\u002Fatividades\u002Fatv-13-arquitetura","2.atividades\u002F14.atv-13-arquitetura",{"title":162,"path":163,"stem":164},"🌐 Atividade 14: Modelagem de APIs REST e Swagger","\u002Fatividades\u002Fatv-14-apis-swagger","2.atividades\u002F15.atv-14-apis-swagger",{"title":166,"path":167,"stem":168},"🌿 Atividade 15: GitFlow e Trabalho Colaborativo","\u002Fatividades\u002Fatv-15-gitflow-colaboracao","2.atividades\u002F16.atv-15-gitflow-colaboracao",{"title":170,"path":171,"stem":172},"🚀 Atividade 16: Pipelines de CI\u002FCD com GitHub Actions","\u002Fatividades\u002Fatv-16-pipelines-cicd","2.atividades\u002F17.atv-16-pipelines-cicd",{"title":174,"path":175,"stem":176},"🐳 Atividade 17: Containerização de Ambientes com Docker","\u002Fatividades\u002Fatv-17-conteineres-docker","2.atividades\u002F18.atv-17-conteineres-docker",{"title":178,"path":179,"stem":180},"🔒 Atividade 18: Segurança no Desenvolvimento e OWASP","\u002Fatividades\u002Fatv-18-seguranca-devsecops","2.atividades\u002F19.atv-18-seguranca-devsecops",{"title":182,"path":183,"stem":184},"📈 Atividade 19: Métricas de Software, Estimativas e DORA","\u002Fatividades\u002Fatv-19-metricas-estimativas","2.atividades\u002F20.atv-19-metricas-estimativas",{"title":186,"path":187,"stem":188},"🏆 Atividade 20: Projeto Final Avançado (Fase 2)","\u002Fatividades\u002Fatv-20-projeto-final-avancado","2.atividades\u002F21.atv-20-projeto-final-avancado",{"title":190,"icon":191,"path":192,"stem":193,"children":194},"🖼️ Galeria de Projetos Integradores","i-lucide-image","\u002Fprojetos-integradores","3.projetos-integradores",[195,197,207,216,225,234,243],{"title":190,"path":192,"stem":196},"3.projetos-integradores\u002Findex",{"title":198,"path":199,"stem":200,"children":201},"🅿️ Projeto 01: Gestão de Estacionamentos","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002Findex",[202,203],{"title":198,"path":199,"stem":200},{"title":204,"path":205,"stem":206},"README","\u002Fprojetos-integradores\u002Fpi-01-gestao-estacionamentos\u002Freadme","3.projetos-integradores\u002F01.pi-01-gestao-estacionamentos\u002F2.readme",{"title":208,"path":209,"stem":210,"children":211},"🔐 Projeto 02: Gerador de Senhas","\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002Findex",[212,213],{"title":208,"path":209,"stem":210},{"title":204,"path":214,"stem":215},"\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas\u002Freadme","3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002F2.readme",{"title":217,"path":218,"stem":219,"children":220},"🍣 Projeto 03: Pedidos Restaurante","\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002Findex",[221,222],{"title":217,"path":218,"stem":219},{"title":204,"path":223,"stem":224},"\u002Fprojetos-integradores\u002Fpi-03-pedidos-restaurante\u002Freadme","3.projetos-integradores\u002F03.pi-03-pedidos-restaurante\u002F2.readme",{"title":226,"path":227,"stem":228,"children":229},"📱 Projeto 04: Empréstimos Dispositivos","\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002Findex",[230,231],{"title":226,"path":227,"stem":228},{"title":204,"path":232,"stem":233},"\u002Fprojetos-integradores\u002Fpi-04-emprestimos-dispositivos\u002Freadme","3.projetos-integradores\u002F04.pi-04-emprestimos-dispositivos\u002F2.readme",{"title":235,"path":236,"stem":237,"children":238},"📦 Projeto 05: Gestão de Estoque","\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002Findex",[239,240],{"title":235,"path":236,"stem":237},{"title":204,"path":241,"stem":242},"\u002Fprojetos-integradores\u002Fpi-05-gestao-estoque\u002Freadme","3.projetos-integradores\u002F05.pi-05-gestao-estoque\u002F2.readme",{"title":244,"path":245,"stem":246,"children":247},"🛵 Projeto 06: Aplicativo de Delivery","\u002Fprojetos-integradores\u002Fpi-06-delivery","3.projetos-integradores\u002F06.pi-06-delivery\u002Findex",[248,249],{"title":244,"path":245,"stem":246},{"title":204,"path":250,"stem":251},"\u002Fprojetos-integradores\u002Fpi-06-delivery\u002Freadme","3.projetos-integradores\u002F06.pi-06-delivery\u002F2.readme",{"id":253,"title":208,"body":254,"description":924,"extension":1685,"links":1686,"meta":1687,"navigation":958,"path":209,"seo":1688,"stem":210,"__hash__":1689},"docs\u002F3.projetos-integradores\u002F02.pi-02-gerador-senhas\u002Findex.md",{"type":255,"value":256,"toc":1647},"minimark",[257,311,314,344,355,358,374,379,381,385,549,551,555,563,566,570,574,586,589,593,604,614,618,626,641,645,648,682,684,688,691,695,698,732,736,739,759,763,766,824,828,852,857,884,898,900,904,907,911,918,1176,1180,1191,1305,1326,1328,1332,1336,1343,1348,1386,1391,1421,1425,1432,1460,1464,1467,1586,1588,1592,1595,1599,1602,1606,1615,1619,1622,1625,1629,1632,1635,1638,1643],[258,259,261,262,261,267,270,272,274,276,278,280,261,282,261,287,261,292,294,296,298,300,302,304,261,306],"div",{"align":260},"center","\n  ",[263,264,266],"h3",{"id":265},"projeto-integrador","PROJETO INTEGRADOR",[268,269],"br",{},[268,271],{},[268,273],{},[268,275],{},[268,277],{},[268,279],{},[268,281],{},[283,284,286],"h1",{"id":285},"projeto-integrador-safepass-corporate","PROJETO INTEGRADOR: SAFEPASS CORPORATE",[288,289,291],"h2",{"id":290},"sistema-de-gestão-segura-de-credenciais-corporativas","Sistema de Gestão Segura de Credenciais Corporativas",[268,293],{},[268,295],{},[268,297],{},[268,299],{},[268,301],{},[268,303],{},[268,305],{},[307,308,310],"h4",{"id":309},"_2026","2026",[258,312],{"style":313},"page-break-after: always;",[258,315,261,316,261,320,322,324,326,328,330,332,261,334,261,337,261,340,342],{"align":260},[263,317,319],{"id":318},"autores-do-projeto","AUTORES DO PROJETO",[268,321],{},[268,323],{},[268,325],{},[268,327],{},[268,329],{},[268,331],{},[268,333],{},[283,335,286],{"id":336},"projeto-integrador-safepass-corporate-1",[288,338,291],{"id":339},"sistema-de-gestão-segura-de-credenciais-corporativas-1",[268,341],{},[268,343],{},[258,345,261,347],{"align":346},"right",[258,348,350,351,261],{"style":349},"width: 50%; float: right; text-align: justify; font-size: 14px;","\n    ",[352,353,354],"p",{},"Documentação técnica do Projeto Integrador, desenvolvida como parte dos requisitos de avaliação nas disciplinas de Engenharia de Software e Banco de Dados.",[258,356],{"style":357},"clear: both;",[352,359,360,362,364,366,368,370,372],{},[268,361],{},[268,363],{},[268,365],{},[268,367],{},[268,369],{},[268,371],{},[268,373],{},[258,375,261,376],{"align":260},[307,377,310],{"id":378},"_2026-1",[258,380],{"style":313},[288,382,384],{"id":383},"sumário","Sumário",[386,387,388,396,433,469,491,520],"ol",{},[389,390,391],"li",{},[392,393,395],"a",{"href":394},"#1-introdu%C3%A7%C3%A3o","Introdução",[389,397,398,402],{},[392,399,401],{"href":400},"#2-fundamenta%C3%A7%C3%A3o-te%C3%B3rica","Fundamentação Teórica",[403,404,405,412,419,426],"ul",{},[389,406,407,408],{},"2.1. ",[392,409,411],{"href":410},"#21-o-problema-da-inseguran%C3%A7a-de-senhas-corporativas","O Problema da Insegurança de Senhas Corporativas",[389,413,414,415],{},"2.2. ",[392,416,418],{"href":417},"#22-criptografia-sim%C3%A9trica-aes-128-e-a-biblioteca-fernet","Criptografia Simétrica (AES-128) e a Biblioteca Fernet",[389,420,421,422],{},"2.3. ",[392,423,425],{"href":424},"#23-entropia-e-o-m%C3%B3dulo-secrets-do-python","Entropia e o Módulo Secrets do Python",[389,427,428,429],{},"2.4. ",[392,430,432],{"href":431},"#24-hashing-vs-criptografia-bcrypt","Hashing vs. Criptografia: Bcrypt",[389,434,435,439],{},[392,436,438],{"href":437},"#3-engenharia-de-software","Engenharia de Software",[403,440,441,448,455,462],{},[389,442,443,444],{},"3.1. ",[392,445,447],{"href":446},"#31-requisitos-funcionais-rf","Requisitos Funcionais (RF)",[389,449,450,451],{},"3.2. ",[392,452,454],{"href":453},"#32-requisitos-n%C3%A3o-funcionais-rnf","Requisitos Não Funcionais (RNF)",[389,456,457,458],{},"3.3. ",[392,459,461],{"href":460},"#33-orienta%C3%A7%C3%A3o-a-objetos-na-arquitetura-do-sistema","Orientação a Objetos na Arquitetura do Sistema",[389,463,464,465],{},"3.4. ",[392,466,468],{"href":467},"#34-caso-de-uso-principal-uc-01","Caso de Uso Principal (UC-01)",[389,470,471,475],{},[392,472,474],{"href":473},"#4-banco-de-dados-mysql","Banco de Dados (MySQL)",[403,476,477,484],{},[389,478,479,480],{},"4.1. ",[392,481,483],{"href":482},"#41-modelagem-e-script-ddl","Modelagem e Script DDL",[389,485,486,487],{},"4.2. ",[392,488,490],{"href":489},"#42-consultas-complexas-e-relat%C3%B3rios-de-auditoria-dml","Consultas Complexas e Relatórios de Auditoria (DML)",[389,492,493,497],{},[392,494,496],{"href":495},"#5-gest%C3%A3o-seguran%C3%A7a-e-lgpd","Gestão, Segurança e LGPD",[403,498,499,506,513],{},[389,500,501,502],{},"5.1. ",[392,503,505],{"href":504},"#51-backlog-e-hist%C3%B3rias-de-usu%C3%A1rio-padr%C3%A3o-invest","Backlog e Histórias de Usuário (Padrão INVEST)",[389,507,508,509],{},"5.2. ",[392,510,512],{"href":511},"#52-conformidade-com-a-lgpd-e-privacy-by-design","Conformidade com a LGPD e Privacy by Design",[389,514,515,516],{},"5.3. ",[392,517,519],{"href":518},"#53-cronograma-do-projeto","Cronograma do Projeto",[389,521,522,526],{},[392,523,525],{"href":524},"#6-diagramas-de-visualiza%C3%A7%C3%A3o","Diagramas de Visualização",[403,527,528,535,542],{},[389,529,530,531],{},"6.1. ",[392,532,534],{"href":533},"#61-diagrama-de-casos-de-uso","Diagrama de Casos de Uso",[389,536,537,538],{},"6.2. ",[392,539,541],{"href":540},"#62-diagrama-de-classes","Diagrama de Classes",[389,543,544,545],{},"6.3. ",[392,546,548],{"href":547},"#63-diagrama-de-entidade-relacionamento-der","Diagrama de Entidade-Relacionamento (DER)",[258,550],{"style":313},[288,552,554],{"id":553},"_1-introdução","1. Introdução",[352,556,557,558,562],{},"A era digital trouxe consigo uma dependência inexorável de sistemas de informação para o funcionamento das organizações. Com a expansão do perímetro de segurança, impulsionada pelo trabalho remoto e pela adoção de serviços em nuvem, a gestão de credenciais tornou-se um dos pilares mais críticos da segurança da informação. O Projeto Integrador ",[559,560,561],"strong",{},"SafePass Corporate",", desenvolvido como projeto acadêmico (2026), propõe uma solução robusta, escalável e academicamente rigorosa para mitigar os riscos associados à má gestão de senhas no ambiente corporativo.",[352,564,565],{},"O principal objetivo deste projeto é conceber e modelar um sistema de custódia e geração de senhas que aplique princípios avançados de Engenharia de Software e Banco de Dados. A arquitetura foi desenhada para garantir a confidencialidade, integridade, disponibilidade e rastreabilidade das credenciais, premissas exigidas por regulamentações vigentes como a Lei Geral de Proteção de Dados (LGPD). Este documento apresenta toda a modelagem sistêmica, especificações de requisitos, arquitetura de banco de dados e as justificativas criptográficas que embasam a solução.",[288,567,569],{"id":568},"_2-fundamentação-teórica","2. Fundamentação Teórica",[263,571,573],{"id":572},"_21-o-problema-da-insegurança-de-senhas-corporativas","2.1. O Problema da Insegurança de Senhas Corporativas",[352,575,576,577,581,582,585],{},"No contexto corporativo contemporâneo, a vulnerabilidade do fator humano continua sendo o elo mais fraco da cadeia de segurança. Práticas como a reutilização de senhas entre múltiplos serviços, a adoção de senhas com baixa entropia e o armazenamento inseguro de credenciais (como em planilhas ou blocos de notas não criptografados) expõem as organizações a ataques de força bruta, ",[578,579,580],"em",{},"credential stuffing"," e ",[578,583,584],{},"phishing",".",[352,587,588],{},"As violações de dados frequentemente resultam de credenciais comprometidas, o que pode acarretar prejuízos financeiros severos, danos irreversíveis à reputação da marca e sanções legais. Nesse cenário, um gerenciador de senhas corporativo não é apenas uma ferramenta de conveniência, mas um mecanismo de controle de acesso essencial que centraliza a custódia de segredos e aplica políticas de complexidade de forma automatizada e imperceptível para o usuário final.",[263,590,592],{"id":591},"_22-criptografia-simétrica-aes-128-e-a-biblioteca-fernet","2.2. Criptografia Simétrica (AES-128) e a Biblioteca Fernet",[352,594,595,596,599,600,603],{},"Para o armazenamento do conteúdo sensível (neste caso, as senhas corporativas), o projeto emprega o padrão de criptografia simétrica AES (Advanced Encryption Standard). Especificamente, a arquitetura faz uso da especificação AES-128 em modo CBC (Cipher Block Chaining) com preenchimento (padding) PKCS7, abstraída pela biblioteca ",[578,597,598],{},"Fernet"," da suíte ",[578,601,602],{},"cryptography"," do Python.",[352,605,606,607,609,610,613],{},"O uso da biblioteca ",[578,608,598],{}," assegura que toda mensagem criptografada (o ",[578,611,612],{},"ciphertext",") seja assinada digitalmente com um HMAC (Hash-based Message Authentication Code) utilizando SHA-256. Isso não apenas garante a confidencialidade do dado em repouso no banco de dados, mas também a sua integridade, evitando que o dado sofra qualquer tipo de manipulação ou corrupção maliciosa. A escolha do AES-128 balanceia alta performance computacional (essencial para não degradar a experiência do usuário) com um nível de segurança considerado inquebrável por métodos criptoanalíticos clássicos.",[263,615,617],{"id":616},"_23-entropia-e-o-módulo-secrets-do-python","2.3. Entropia e o Módulo Secrets do Python",[352,619,620,621,625],{},"A geração de novas senhas pelo SafePass Corporate requer um gerador de números pseudoaleatórios criptograficamente seguro (CSPRNG). O uso de funções randômicas padrão, como o módulo ",[622,623,624],"code",{},"random"," tradicional, é inadequado para segurança devido à sua previsibilidade inerente e suscetibilidade a ataques de inferência de estado.",[352,627,628,629,632,633,636,637,640],{},"Para atender aos rigorosos critérios de segurança, a solução utiliza o módulo ",[622,630,631],{},"secrets"," nativo da linguagem Python, projetado especificamente para gerenciar dados sigilosos e ",[578,634,635],{},"tokens"," de autenticação. A entropia das senhas geradas provém de fontes de entropia do sistema operacional (como o ",[622,638,639],{},"\u002Fdev\u002Furandom"," em sistemas baseados em Unix), garantindo que cada caracter inserido na nova senha seja estatisticamente independente e impredizível. A alta entropia impede a eficácia de ataques de dicionário e reduz substancialmente a probabilidade de colisões.",[263,642,644],{"id":643},"_24-hashing-vs-criptografia-bcrypt","2.4. Hashing vs. Criptografia: Bcrypt",[352,646,647],{},"É fundamental distinguir o armazenamento das credenciais do sistema (a senha mestra do usuário) do armazenamento dos segredos custodiados (as senhas de terceiros salvas pelo usuário).",[403,649,650,656],{},[389,651,652,655],{},[559,653,654],{},"Criptografia Simétrica (Fernet\u002FAES):"," Aplicada às senhas que o usuário guarda no cofre. A criptografia é uma função bidirecional; portanto, o sistema deve ser capaz de decriptar o valor para exibi-lo ao usuário legítimo mediante o fornecimento da chave correta.",[389,657,658,661,662,665,666,669,670,673,674,677,678,681],{},[559,659,660],{},"Hashing (Bcrypt):"," Aplicado exclusivamente à senha mestra do usuário que dá acesso ao sistema SafePass. Diferente da criptografia, o ",[578,663,664],{},"hashing"," é unidirecional. A utilização do algoritmo Bcrypt impõe um \"fator de custo\" (",[578,667,668],{},"work factor","), tornando a função intencionalmente lenta e intensiva em processamento. Esse design mitiga significativamente ataques de força bruta, pois atrasa a taxa na qual um atacante pode calcular os ",[578,671,672],{},"hashes",". Ademais, o Bcrypt gera e incorpora um ",[578,675,676],{},"salt"," único automaticamente, anulando ataques com base em tabelas ",[578,679,680],{},"rainbow"," (Rainbow Tables).",[258,683],{"style":313},[288,685,687],{"id":686},"_3-engenharia-de-software","3. Engenharia de Software",[352,689,690],{},"O desenvolvimento do SafePass Corporate foi pautado em um ciclo de vida de desenvolvimento de software (SDLC) iterativo, adotando práticas consolidadas de Engenharia de Requisitos e modelagem orientada a objetos (UML).",[263,692,694],{"id":693},"_31-requisitos-funcionais-rf","3.1. Requisitos Funcionais (RF)",[352,696,697],{},"Os Requisitos Funcionais descrevem as ações específicas que o sistema deve estar preparado para executar:",[386,699,700,706,714,720,726],{},[389,701,702,705],{},[559,703,704],{},"RF-01 | Autenticação Segura:"," O sistema deve permitir que os usuários se autentiquem utilizando um e-mail corporativo e uma senha mestra, cuja validação deverá ocorrer via comparação de hash Bcrypt.",[389,707,708,711,712,585],{},[559,709,710],{},"RF-02 | Geração de Senhas de Alta Entropia:"," O sistema deve fornecer um módulo capaz de gerar senhas aleatórias configuráveis (comprimento, letras, números, símbolos) utilizando o módulo criptograficamente seguro ",[622,713,631],{},[389,715,716,719],{},[559,717,718],{},"RF-03 | Custódia Criptografada de Segredos:"," O sistema deve armazenar as credenciais corporativas informadas pelo usuário, garantindo que o dado sensível seja criptografado (AES-128\u002FFernet) antes da persistência no banco de dados.",[389,721,722,725],{},[559,723,724],{},"RF-04 | Desencriptação em Tempo Real:"," O sistema deve permitir que o usuário proprietário da credencial recupere e visualize a senha em texto plano (plaintext) em sua interface, decriptando o conteúdo sob demanda.",[389,727,728,731],{},[559,729,730],{},"RF-05 | Auditoria de Acessos:"," O sistema deve registrar um log imutável de todas as ações de inserção, visualização e exclusão de credenciais, associando a ação ao ID do usuário e ao timestamp da requisição.",[263,733,735],{"id":734},"_32-requisitos-não-funcionais-rnf","3.2. Requisitos Não Funcionais (RNF)",[352,737,738],{},"Os Requisitos Não Funcionais especificam atributos de qualidade e restrições técnicas do sistema:",[386,740,741,747,753],{},[389,742,743,746],{},[559,744,745],{},"RNF-01 | Segurança de Dados (Confidencialidade):"," Sob nenhuma circunstância o sistema deverá armazenar a senha mestra do usuário em texto plano ou trafegá-la sem a devida proteção de TLS\u002FSSL.",[389,748,749,752],{},[559,750,751],{},"RNF-02 | Desempenho e Latência:"," O processo de encriptação e persistência de uma credencial no banco de dados não deve exceder a latência de 500 milissegundos, garantindo fluidez na interface.",[389,754,755,758],{},[559,756,757],{},"RNF-03 | Conformidade Legal:"," O projeto da arquitetura de dados e logs deve estar estritamente alinhado às diretrizes de privacidade da Lei Geral de Proteção de Dados (LGPD), permitindo a exclusão definitiva dos dados do usuário (direito ao esquecimento).",[263,760,762],{"id":761},"_33-orientação-a-objetos-na-arquitetura-do-sistema","3.3. Orientação a Objetos na Arquitetura do Sistema",[352,764,765],{},"A arquitetura do SafePass Corporate adota os pilares da Programação Orientada a Objetos (POO) para promover coesão, baixo acoplamento e reusabilidade do código. A modelagem teórica engloba:",[403,767,768,789,802],{},[389,769,770,773,774,777,778,581,781,784,785,788],{},[559,771,772],{},"Abstração:"," O sistema isola as complexidades da biblioteca de criptografia do resto da aplicação. Uma classe ",[622,775,776],{},"CryptoService"," expõe apenas os métodos ",[622,779,780],{},"encrypt()",[622,782,783],{},"decrypt()",", ocultando do domínio as operações de ",[578,786,787],{},"padding"," e geração de chave.",[389,790,791,794,795,581,798,801],{},[559,792,793],{},"Encapsulamento:"," Os atributos críticos das classes de domínio (como a chave secreta do usuário e o hash da senha) são definidos como privados. O acesso a essas propriedades e suas mutações são restritos a métodos ",[578,796,797],{},"getters",[578,799,800],{},"setters"," controlados, assegurando que o estado do objeto não seja corrompido.",[389,803,804,807,808,811,812,815,816,819,820,823],{},[559,805,806],{},"Polimorfismo:"," A aplicação implementa interfaces para o registro de atividades (Auditoria). Por exemplo, a interface ",[622,809,810],{},"ILogger"," pode ser instanciada como ",[622,813,814],{},"DatabaseLogger"," ou ",[622,817,818],{},"FileLogger",", permitindo que o sistema grave eventos de segurança em diferentes mídias chamando o mesmo método ",[622,821,822],{},".log()",", sem que a camada de negócios precise conhecer a implementação de destino.",[263,825,827],{"id":826},"_34-caso-de-uso-principal-uc-01","3.4. Caso de Uso Principal (UC-01)",[352,829,830,833,834,836,839,840,842,845,846,848,851],{},[559,831,832],{},"Identificador:"," UC-01",[268,835],{},[559,837,838],{},"Nome:"," Armazenar Nova Credencial Corporativa",[268,841],{},[559,843,844],{},"Ator Principal:"," Usuário Corporativo Autenticado",[268,847],{},[559,849,850],{},"Pré-condição:"," O usuário deve estar logado no sistema com uma sessão ativa.",[352,853,854],{},[559,855,856],{},"Fluxo Principal:",[386,858,859,862,865,868,871,878,881],{},[389,860,861],{},"O usuário acessa a funcionalidade \"Nova Credencial\".",[389,863,864],{},"O sistema apresenta o formulário solicitando Título, URL\u002FSistema, Nome de Usuário e Senha.",[389,866,867],{},"O usuário preenche os dados (opcionalmente utilizando o RF-02 para gerar a senha) e confirma a submissão.",[389,869,870],{},"O sistema intercepta o dado, instancia a classe de criptografia e aplica a cifra Fernet (AES-128) na senha em texto plano.",[389,872,873,874,877],{},"O sistema envia a instrução ",[622,875,876],{},"INSERT"," para o Banco de Dados com os metadados e o conteúdo já cifrado.",[389,879,880],{},"O sistema registra o evento no Log de Auditoria.",[389,882,883],{},"O sistema retorna uma mensagem de sucesso para a interface do usuário.",[352,885,886,889,890,893,894,897],{},[559,887,888],{},"Fluxo de Exceção 1 (Falha na Persistência):","\nSe, no passo 5, o banco de dados retornar um erro (ex: ",[578,891,892],{},"timeout"," ou violação de chave), o sistema aborta a transação (",[578,895,896],{},"rollback","), não grava o Log de Auditoria associado a essa inserção e exibe a mensagem: \"Erro ao comunicar com o servidor de banco de dados. Tente novamente.\"",[258,899],{"style":313},[288,901,903],{"id":902},"_4-banco-de-dados-mysql","4. Banco de Dados (MySQL)",[352,905,906],{},"O sistema de gerenciamento de banco de dados relacional escolhido para o projeto é o MySQL. A modelagem foi concebida para estar na 3ª Forma Normal (3FN), mitigando anomalias de atualização e redundâncias.",[263,908,910],{"id":909},"_41-modelagem-e-script-ddl","4.1. Modelagem e Script DDL",[352,912,913,914,917],{},"O script de ",[578,915,916],{},"Data Definition Language"," (DDL) evidencia a criação de tabelas cruciais, definindo chaves primárias (PK), chaves estrangeiras (FK) com integridade referencial, e a correta tipagem para armazenar conteúdo binário encriptado.",[919,920,925],"pre",{"className":921,"code":922,"language":923,"meta":924,"style":924},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","-- Criação do Banco de Dados\nCREATE DATABASE IF NOT EXISTS db_safepass_corporate\nCHARACTER SET utf8mb4 \nCOLLATE utf8mb4_unicode_ci;\n\nUSE db_safepass_corporate;\n\n-- Tabela de Usuários (Colaboradores)\nCREATE TABLE IF NOT EXISTS tbl_usuarios (\n    id_usuario INT AUTO_INCREMENT PRIMARY KEY,\n    nome_completo VARCHAR(100) NOT NULL,\n    email_corporativo VARCHAR(150) NOT NULL UNIQUE,\n    senha_hash VARCHAR(255) NOT NULL COMMENT 'Armazena o hash Bcrypt',\n    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,\n    status ENUM('ATIVO', 'INATIVO') DEFAULT 'ATIVO'\n);\n\n-- Tabela de Credenciais (Cofre de Senhas)\nCREATE TABLE IF NOT EXISTS tbl_credenciais (\n    id_credencial INT AUTO_INCREMENT PRIMARY KEY,\n    id_usuario INT NOT NULL,\n    titulo_servico VARCHAR(100) NOT NULL,\n    url_sistema VARCHAR(255),\n    nome_usuario_acesso VARCHAR(100) NOT NULL,\n    senha_criptografada VARBINARY(500) NOT NULL COMMENT 'Senha cifrada com AES-128 (Fernet)',\n    data_registro DATETIME DEFAULT CURRENT_TIMESTAMP,\n    data_atualizacao DATETIME ON UPDATE CURRENT_TIMESTAMP,\n    FOREIGN KEY (id_usuario) REFERENCES tbl_usuarios(id_usuario) \n        ON DELETE CASCADE \n        ON UPDATE CASCADE\n);\n\n-- Tabela de Logs de Auditoria\nCREATE TABLE IF NOT EXISTS tbl_auditoria_logs (\n    id_log INT AUTO_INCREMENT PRIMARY KEY,\n    id_usuario INT NOT NULL,\n    acao_realizada VARCHAR(50) NOT NULL,\n    descricao_evento TEXT,\n    endereco_ip VARCHAR(45) NOT NULL,\n    data_evento DATETIME DEFAULT CURRENT_TIMESTAMP,\n    FOREIGN KEY (id_usuario) REFERENCES tbl_usuarios(id_usuario)\n);\n","sql","",[622,926,927,935,941,947,953,960,966,971,977,983,989,995,1001,1007,1013,1019,1025,1030,1036,1042,1048,1054,1060,1066,1072,1078,1084,1090,1096,1102,1108,1113,1118,1124,1130,1136,1141,1147,1153,1159,1165,1171],{"__ignoreMap":924},[928,929,932],"span",{"class":930,"line":931},"line",1,[928,933,934],{},"-- Criação do Banco de Dados\n",[928,936,938],{"class":930,"line":937},2,[928,939,940],{},"CREATE DATABASE IF NOT EXISTS db_safepass_corporate\n",[928,942,944],{"class":930,"line":943},3,[928,945,946],{},"CHARACTER SET utf8mb4 \n",[928,948,950],{"class":930,"line":949},4,[928,951,952],{},"COLLATE utf8mb4_unicode_ci;\n",[928,954,956],{"class":930,"line":955},5,[928,957,959],{"emptyLinePlaceholder":958},true,"\n",[928,961,963],{"class":930,"line":962},6,[928,964,965],{},"USE db_safepass_corporate;\n",[928,967,969],{"class":930,"line":968},7,[928,970,959],{"emptyLinePlaceholder":958},[928,972,974],{"class":930,"line":973},8,[928,975,976],{},"-- Tabela de Usuários (Colaboradores)\n",[928,978,980],{"class":930,"line":979},9,[928,981,982],{},"CREATE TABLE IF NOT EXISTS tbl_usuarios (\n",[928,984,986],{"class":930,"line":985},10,[928,987,988],{},"    id_usuario INT AUTO_INCREMENT PRIMARY KEY,\n",[928,990,992],{"class":930,"line":991},11,[928,993,994],{},"    nome_completo VARCHAR(100) NOT NULL,\n",[928,996,998],{"class":930,"line":997},12,[928,999,1000],{},"    email_corporativo VARCHAR(150) NOT NULL UNIQUE,\n",[928,1002,1004],{"class":930,"line":1003},13,[928,1005,1006],{},"    senha_hash VARCHAR(255) NOT NULL COMMENT 'Armazena o hash Bcrypt',\n",[928,1008,1010],{"class":930,"line":1009},14,[928,1011,1012],{},"    data_criacao DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[928,1014,1016],{"class":930,"line":1015},15,[928,1017,1018],{},"    status ENUM('ATIVO', 'INATIVO') DEFAULT 'ATIVO'\n",[928,1020,1022],{"class":930,"line":1021},16,[928,1023,1024],{},");\n",[928,1026,1028],{"class":930,"line":1027},17,[928,1029,959],{"emptyLinePlaceholder":958},[928,1031,1033],{"class":930,"line":1032},18,[928,1034,1035],{},"-- Tabela de Credenciais (Cofre de Senhas)\n",[928,1037,1039],{"class":930,"line":1038},19,[928,1040,1041],{},"CREATE TABLE IF NOT EXISTS tbl_credenciais (\n",[928,1043,1045],{"class":930,"line":1044},20,[928,1046,1047],{},"    id_credencial INT AUTO_INCREMENT PRIMARY KEY,\n",[928,1049,1051],{"class":930,"line":1050},21,[928,1052,1053],{},"    id_usuario INT NOT NULL,\n",[928,1055,1057],{"class":930,"line":1056},22,[928,1058,1059],{},"    titulo_servico VARCHAR(100) NOT NULL,\n",[928,1061,1063],{"class":930,"line":1062},23,[928,1064,1065],{},"    url_sistema VARCHAR(255),\n",[928,1067,1069],{"class":930,"line":1068},24,[928,1070,1071],{},"    nome_usuario_acesso VARCHAR(100) NOT NULL,\n",[928,1073,1075],{"class":930,"line":1074},25,[928,1076,1077],{},"    senha_criptografada VARBINARY(500) NOT NULL COMMENT 'Senha cifrada com AES-128 (Fernet)',\n",[928,1079,1081],{"class":930,"line":1080},26,[928,1082,1083],{},"    data_registro DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[928,1085,1087],{"class":930,"line":1086},27,[928,1088,1089],{},"    data_atualizacao DATETIME ON UPDATE CURRENT_TIMESTAMP,\n",[928,1091,1093],{"class":930,"line":1092},28,[928,1094,1095],{},"    FOREIGN KEY (id_usuario) REFERENCES tbl_usuarios(id_usuario) \n",[928,1097,1099],{"class":930,"line":1098},29,[928,1100,1101],{},"        ON DELETE CASCADE \n",[928,1103,1105],{"class":930,"line":1104},30,[928,1106,1107],{},"        ON UPDATE CASCADE\n",[928,1109,1111],{"class":930,"line":1110},31,[928,1112,1024],{},[928,1114,1116],{"class":930,"line":1115},32,[928,1117,959],{"emptyLinePlaceholder":958},[928,1119,1121],{"class":930,"line":1120},33,[928,1122,1123],{},"-- Tabela de Logs de Auditoria\n",[928,1125,1127],{"class":930,"line":1126},34,[928,1128,1129],{},"CREATE TABLE IF NOT EXISTS tbl_auditoria_logs (\n",[928,1131,1133],{"class":930,"line":1132},35,[928,1134,1135],{},"    id_log INT AUTO_INCREMENT PRIMARY KEY,\n",[928,1137,1139],{"class":930,"line":1138},36,[928,1140,1053],{},[928,1142,1144],{"class":930,"line":1143},37,[928,1145,1146],{},"    acao_realizada VARCHAR(50) NOT NULL,\n",[928,1148,1150],{"class":930,"line":1149},38,[928,1151,1152],{},"    descricao_evento TEXT,\n",[928,1154,1156],{"class":930,"line":1155},39,[928,1157,1158],{},"    endereco_ip VARCHAR(45) NOT NULL,\n",[928,1160,1162],{"class":930,"line":1161},40,[928,1163,1164],{},"    data_evento DATETIME DEFAULT CURRENT_TIMESTAMP,\n",[928,1166,1168],{"class":930,"line":1167},41,[928,1169,1170],{},"    FOREIGN KEY (id_usuario) REFERENCES tbl_usuarios(id_usuario)\n",[928,1172,1174],{"class":930,"line":1173},42,[928,1175,1024],{},[263,1177,1179],{"id":1178},"_42-consultas-complexas-e-relatórios-de-auditoria-dml","4.2. Consultas Complexas e Relatórios de Auditoria (DML)",[352,1181,1182,1183,1186,1187,1190],{},"Para atender a demandas rigorosas de ",[578,1184,1185],{},"Compliance"," e governança corporativa, os DBAs do projeto desenvolveram rotinas de ",[578,1188,1189],{},"Data Manipulation Language"," (DML) avançadas. A consulta abaixo gera um relatório analítico para auditores, listando os usuários mais ativos na plataforma nos últimos 6 meses, agregando dados de quantitativo de credenciais armazenadas e eventos críticos gerados.",[919,1192,1194],{"className":921,"code":1193,"language":923,"meta":924,"style":924},"-- Relatório Avançado de Auditoria Semestral\nSELECT \n    U.nome_completo AS 'Colaborador',\n    U.email_corporativo AS 'E-mail',\n    COUNT(DISTINCT C.id_credencial) AS 'Total de Credenciais no Cofre',\n    COUNT(DISTINCT A.id_log) AS 'Total de Eventos de Auditoria',\n    MAX(A.data_evento) AS 'Última Atividade Registrada'\nFROM \n    tbl_usuarios U\nINNER JOIN \n    tbl_credenciais C ON U.id_usuario = C.id_usuario\nINNER JOIN \n    tbl_auditoria_logs A ON U.id_usuario = A.id_usuario\nWHERE \n    A.data_evento >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\n    AND U.status = 'ATIVO'\nGROUP BY \n    U.id_usuario, U.nome_completo, U.email_corporativo\nHAVING \n    COUNT(DISTINCT A.id_log) > 10\nORDER BY \n    'Total de Eventos de Auditoria' DESC;\n",[622,1195,1196,1201,1206,1211,1216,1221,1226,1231,1236,1241,1246,1251,1255,1260,1265,1270,1275,1280,1285,1290,1295,1300],{"__ignoreMap":924},[928,1197,1198],{"class":930,"line":931},[928,1199,1200],{},"-- Relatório Avançado de Auditoria Semestral\n",[928,1202,1203],{"class":930,"line":937},[928,1204,1205],{},"SELECT \n",[928,1207,1208],{"class":930,"line":943},[928,1209,1210],{},"    U.nome_completo AS 'Colaborador',\n",[928,1212,1213],{"class":930,"line":949},[928,1214,1215],{},"    U.email_corporativo AS 'E-mail',\n",[928,1217,1218],{"class":930,"line":955},[928,1219,1220],{},"    COUNT(DISTINCT C.id_credencial) AS 'Total de Credenciais no Cofre',\n",[928,1222,1223],{"class":930,"line":962},[928,1224,1225],{},"    COUNT(DISTINCT A.id_log) AS 'Total de Eventos de Auditoria',\n",[928,1227,1228],{"class":930,"line":968},[928,1229,1230],{},"    MAX(A.data_evento) AS 'Última Atividade Registrada'\n",[928,1232,1233],{"class":930,"line":973},[928,1234,1235],{},"FROM \n",[928,1237,1238],{"class":930,"line":979},[928,1239,1240],{},"    tbl_usuarios U\n",[928,1242,1243],{"class":930,"line":985},[928,1244,1245],{},"INNER JOIN \n",[928,1247,1248],{"class":930,"line":991},[928,1249,1250],{},"    tbl_credenciais C ON U.id_usuario = C.id_usuario\n",[928,1252,1253],{"class":930,"line":997},[928,1254,1245],{},[928,1256,1257],{"class":930,"line":1003},[928,1258,1259],{},"    tbl_auditoria_logs A ON U.id_usuario = A.id_usuario\n",[928,1261,1262],{"class":930,"line":1009},[928,1263,1264],{},"WHERE \n",[928,1266,1267],{"class":930,"line":1015},[928,1268,1269],{},"    A.data_evento >= DATE_SUB(CURRENT_DATE(), INTERVAL 6 MONTH)\n",[928,1271,1272],{"class":930,"line":1021},[928,1273,1274],{},"    AND U.status = 'ATIVO'\n",[928,1276,1277],{"class":930,"line":1027},[928,1278,1279],{},"GROUP BY \n",[928,1281,1282],{"class":930,"line":1032},[928,1283,1284],{},"    U.id_usuario, U.nome_completo, U.email_corporativo\n",[928,1286,1287],{"class":930,"line":1038},[928,1288,1289],{},"HAVING \n",[928,1291,1292],{"class":930,"line":1044},[928,1293,1294],{},"    COUNT(DISTINCT A.id_log) > 10\n",[928,1296,1297],{"class":930,"line":1050},[928,1298,1299],{},"ORDER BY \n",[928,1301,1302],{"class":930,"line":1056},[928,1303,1304],{},"    'Total de Eventos de Auditoria' DESC;\n",[352,1306,1307],{},[578,1308,1309,1310,1313,1314,1317,1318,1321,1322,1325],{},"Justificativa Técnica: A query utiliza ",[622,1311,1312],{},"INNER JOIN"," para cruzar tabelas fortemente tipadas. O ",[622,1315,1316],{},"GROUP BY"," condensa a informação no nível do colaborador, enquanto a função de agregação ",[622,1319,1320],{},"DATE_SUB"," dinamicamente retroage 6 meses. O uso da cláusula ",[622,1323,1324],{},"HAVING"," atua como um filtro pós-agregação, exibindo apenas usuários com volume significativo de ações, essencial para identificar padrões anômalos de acesso.",[258,1327],{"style":313},[288,1329,1331],{"id":1330},"_5-gestão-segurança-e-lgpd","5. Gestão, Segurança e LGPD",[263,1333,1335],{"id":1334},"_51-backlog-e-histórias-de-usuário-padrão-invest","5.1. Backlog e Histórias de Usuário (Padrão INVEST)",[352,1337,1338,1339,1342],{},"O desenvolvimento segue uma mentalidade Ágil (Scrum). O Backlog do Produto foi construído garantindo que os itens de trabalho sigam a heurística ",[559,1340,1341],{},"INVEST"," (Independent, Negotiable, Valuable, Estimable, Small, Testable).",[352,1344,1345],{},[559,1346,1347],{},"História de Usuário 01 - Geração de Senhas",[1349,1350,1351],"blockquote",{},[352,1352,1353,1356,1357,1359,1362,1363,1365,1368,1369,1371,1374,1375,1378,1379,1378,1382,1385],{},[559,1354,1355],{},"Como"," um funcionário de infraestrutura,",[268,1358],{},[559,1360,1361],{},"Eu quero"," um gerador automático de senhas que utilize caracteres especiais e alta entropia,",[268,1364],{},[559,1366,1367],{},"Para que"," eu não precise pensar em combinações complexas que atendam às exigências do Active Directory da empresa.",[268,1370],{},[578,1372,1373],{},"Critérios de Aceite:"," O gerador deve possuir opções em interface para definir o tamanho (8 a 64 caracteres); deve incluir por padrão ",[928,1376,1377],{},"A-Z",", ",[928,1380,1381],{},"a-z",[928,1383,1384],{},"0-9"," e símbolos; o tempo de geração não pode ultrapassar 100ms.",[352,1387,1388],{},[559,1389,1390],{},"História de Usuário 02 - Log de Auditoria",[1349,1392,1393],{},[352,1394,1395,1397,1398,1400,1402,1403,1405,1407,1408,1410,1412,1413,1416,1417,1420],{},[559,1396,1355],{}," um Auditor de Segurança (DPO),",[268,1399],{},[559,1401,1361],{}," visualizar um painel administrativo com todos os acessos de decriptação das senhas,",[268,1404],{},[559,1406,1367],{}," a empresa possa rastrear acessos indevidos em caso de vazamento de informações.",[268,1409],{},[578,1411,1373],{}," O registro deve ocorrer via ",[578,1414,1415],{},"trigger"," no banco ou serviço centralizado no back-end; o log deve capturar o ID do usuário, a data e a ação específica (Visualização de Credencial XYZ); o dado de log deve ser somente leitura (",[578,1418,1419],{},"append-only",").",[263,1422,1424],{"id":1423},"_52-conformidade-com-a-lgpd-e-privacy-by-design","5.2. Conformidade com a LGPD e Privacy by Design",[352,1426,1427,1428,1431],{},"A arquitetura do SafePass Corporate foi concebida sob a óptica do ",[578,1429,1430],{},"Privacy by Design"," (Privacidade desde a Concepção). Em total alinhamento à Lei Geral de Proteção de Dados Pessoais (Lei nº 13.709\u002F2018):",[403,1433,1434,1440,1446],{},[389,1435,1436,1439],{},[559,1437,1438],{},"Minimização de Dados (Art. 6º, III):"," O sistema coleta estritamente o necessário para sua finalidade (Nome e E-mail corporativo). Nenhum dado pessoal sensível adicional é requisitado.",[389,1441,1442,1445],{},[559,1443,1444],{},"Segurança (Art. 6º, VIII):"," A utilização de criptografia AES-128 e Hashing Bcrypt demonstra o emprego de medidas técnicas adequadas para proteger os dados contra acessos não autorizados.",[389,1447,1448,1451,1452,1455,1456,1459],{},[559,1449,1450],{},"Direitos do Titular (Art. 18):"," A estrutura em cascata (",[622,1453,1454],{},"ON DELETE CASCADE",") na modelagem de banco de dados assegura que, mediante o desligamento do colaborador ou revogação de consentimento, a exclusão do registro na ",[622,1457,1458],{},"tbl_usuarios"," erradicará automaticamente todas as suas credenciais no cofre e vínculos lógicos no banco de dados, atendendo ao direito à eliminação dos dados.",[263,1461,1463],{"id":1462},"_53-cronograma-do-projeto","5.3. Cronograma do Projeto",[352,1465,1466],{},"A execução do Projeto Integrador foi estruturada em um ciclo intenso de 6 semanas:",[1468,1469,1470,1490],"table",{},[1471,1472,1473],"thead",{},[1474,1475,1476,1480,1484,1487],"tr",{},[1477,1478,1479],"th",{"align":260},"Semana",[1477,1481,1483],{"align":1482},"left","Fase \u002F Artefato Produzido",[1477,1485,1486],{"align":1482},"Responsabilidade",[1477,1488,1489],{"align":1482},"Status",[1491,1492,1493,1510,1525,1540,1555,1570],"tbody",{},[1474,1494,1495,1501,1504,1507],{},[1496,1497,1498],"td",{"align":260},[559,1499,1500],{},"01",[1496,1502,1503],{"align":1482},"Levantamento de Requisitos e Fundamentação (RF\u002FRNF)",[1496,1505,1506],{"align":1482},"Engenharia de Requisitos",[1496,1508,1509],{"align":1482},"Concluído",[1474,1511,1512,1517,1520,1523],{},[1496,1513,1514],{"align":260},[559,1515,1516],{},"02",[1496,1518,1519],{"align":1482},"Modelagem de Banco de Dados (MER, DER) e Criação de DDL",[1496,1521,1522],{"align":1482},"DBA",[1496,1524,1509],{"align":1482},[1474,1526,1527,1532,1535,1538],{},[1496,1528,1529],{"align":260},[559,1530,1531],{},"03",[1496,1533,1534],{"align":1482},"Arquitetura de Software e Diagramação UML",[1496,1536,1537],{"align":1482},"Arquiteto de Software",[1496,1539,1509],{"align":1482},[1474,1541,1542,1547,1550,1553],{},[1496,1543,1544],{"align":260},[559,1545,1546],{},"04",[1496,1548,1549],{"align":1482},"Implementação do Motor de Criptografia (Fernet\u002FBcrypt)",[1496,1551,1552],{"align":1482},"Desenvolvedor Backend",[1496,1554,1509],{"align":1482},[1474,1556,1557,1562,1565,1568],{},[1496,1558,1559],{"align":260},[559,1560,1561],{},"05",[1496,1563,1564],{"align":1482},"Integração das Camadas e Testes de Unitários \u002F Segurança",[1496,1566,1567],{"align":1482},"Desenvolvedor Full-Stack",[1496,1569,1509],{"align":1482},[1474,1571,1572,1577,1580,1583],{},[1496,1573,1574],{"align":260},[559,1575,1576],{},"06",[1496,1578,1579],{"align":1482},"Produção da Documentação Final, Revisão Acadêmica Final",[1496,1581,1582],{"align":1482},"Toda a Equipe",[1496,1584,1585],{"align":1482},"Em Andamento",[258,1587],{"style":313},[288,1589,1591],{"id":1590},"_6-diagramas-de-visualização","6. Diagramas de Visualização",[352,1593,1594],{},"A representação visual da arquitetura foi elaborada utilizando a linguagem de marcação estruturada Mermaid, permitindo integração nativa de documentação como código.",[263,1596,1598],{"id":1597},"_61-diagrama-de-casos-de-uso","6.1. Diagrama de Casos de Uso",[352,1600,1601],{},"Este diagrama evidencia as principais interações do Ator (Usuário Corporativo) com as fronteiras do sistema SafePass.",[1603,1604],"mermaid",{"code":1605},"flowchart LR\n    UC((\"Usuário Corporativo\"))\n    \n    subgraph Sistema [\"SafePass Corporate System\"]\n        direction TB\n        UC1([\"Realizar Login Seguro\"])\n        UC2([\"Gerar Senha Aleatória\"])\n        UC3([\"Armazenar Credencial (Encriptar)\"])\n        UC4([\"Recuperar Credencial (Decriptar)\"])\n        UC5([\"Registrar Atividade de Auditoria\"])\n    end\n    \n    UC --> UC1\n    UC --> UC2\n    UC --> UC3\n    UC --> UC4\n    \n    UC3 -.->|\"&lt;&lt;include&gt;&gt;\"| UC5\n    UC4 -.->|\"&lt;&lt;include&gt;&gt;\"| UC5\n    UC1 -.->|\"&lt;&lt;include&gt;&gt;\"| UC5\n",[352,1607,1608,1611],{},[559,1609,1610],{},"Versão em SVG (Diagrama de Casos de Uso):",[1612,1613],"img",{"alt":534,"src":1614},"\u002Fimg\u002Fprojetos-integradores\u002Fpi-02-gerador-senhas\u002Fusecase_safepass.svg",[263,1616,1618],{"id":1617},"_62-diagrama-de-classes","6.2. Diagrama de Classes",[352,1620,1621],{},"O diagrama de classes reflete o nível de abstração orientado a objetos, focando no desacoplamento entre os domínios de negócio e os serviços criptográficos.",[1603,1623],{"code":1624},"classDiagram\n    class Usuario {\n        -int idUsuario\n        -String nomeCompleto\n        -String emailCorporativo\n        -String senhaHash\n        +autenticar(email, senhaTexto): boolean\n        +adicionarCredencial(credencial: Credencial): void\n    }\n\n    class Credencial {\n        -int idCredencial\n        -String tituloServico\n        -String nomeUsuarioAcesso\n        -byte[] senhaCriptografada\n        +setSenhaPlana(senhaPlana: String, crypto: CryptoService): void\n        +getSenhaPlana(crypto: CryptoService): String\n    }\n\n    class CryptoService {\n        \u003C\u003Cinterface>>\n        +encrypt(textoPlano: String): byte[]\n        +decrypt(textoCifrado: byte[]): String\n    }\n\n    class FernetCryptoImpl {\n        -SecretKey chaveSecreta\n        +encrypt(textoPlano: String): byte[]\n        +decrypt(textoCifrado: byte[]): String\n    }\n\n    class AuditoriaLogger {\n        +registrarEvento(idUsuario: int, acao: String, ip: String): void\n    }\n\n    Usuario \"1\" *-- \"0..*\" Credencial : possui\n    Credencial ..> CryptoService : depende\n    FernetCryptoImpl ..|> CryptoService : implementa\n    Usuario ..> AuditoriaLogger : gera log\n",[263,1626,1628],{"id":1627},"_63-diagrama-de-entidade-relacionamento-der","6.3. Diagrama de Entidade-Relacionamento (DER)",[352,1630,1631],{},"O DER lógico abaixo detalha os artefatos de dados hospedados no MySQL, consolidando as relações estruturadas no script DDL da Seção 4.1.",[1603,1633],{"code":1634},"erDiagram\n    TBL_USUARIOS {\n        int id_usuario PK\n        string nome_completo\n        string email_corporativo UK\n        string senha_hash \"Bcrypt\"\n        datetime data_criacao\n        enum status \"ATIVO\u002FINATIVO\"\n    }\n\n    TBL_CREDENCIAIS {\n        int id_credencial PK\n        int id_usuario FK\n        string titulo_servico\n        string url_sistema\n        string nome_usuario_acesso\n        varbinary senha_criptografada \"AES-128\"\n        datetime data_registro\n    }\n\n    TBL_AUDITORIA_LOGS {\n        int id_log PK\n        int id_usuario FK\n        string acao_realizada\n        text descricao_evento\n        string endereco_ip\n        datetime data_evento\n    }\n\n    TBL_USUARIOS ||--o{ TBL_CREDENCIAIS : \"armazena (1:N)\"\n    TBL_USUARIOS ||--o{ TBL_AUDITORIA_LOGS : \"gera (1:N)\"\n",[1636,1637],"hr",{},[352,1639,1640],{},[578,1641,1642],{},"Fim da Documentação do Projeto Integrador (2026). Este documento foi estruturado visando o rigor técnico, profundidade em arquitetura de software e aderência às melhores práticas de segurança da informação no cenário corporativo.",[1644,1645,1646],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":924,"searchDepth":937,"depth":943,"links":1648},[1649,1650,1654,1657,1658,1659,1665,1671,1675,1680],{"id":265,"depth":943,"text":266},{"id":290,"depth":937,"text":291,"children":1651},[1652,1653],{"id":309,"depth":949,"text":310},{"id":318,"depth":943,"text":319},{"id":339,"depth":937,"text":291,"children":1655},[1656],{"id":378,"depth":949,"text":310},{"id":383,"depth":937,"text":384},{"id":553,"depth":937,"text":554},{"id":568,"depth":937,"text":569,"children":1660},[1661,1662,1663,1664],{"id":572,"depth":943,"text":573},{"id":591,"depth":943,"text":592},{"id":616,"depth":943,"text":617},{"id":643,"depth":943,"text":644},{"id":686,"depth":937,"text":687,"children":1666},[1667,1668,1669,1670],{"id":693,"depth":943,"text":694},{"id":734,"depth":943,"text":735},{"id":761,"depth":943,"text":762},{"id":826,"depth":943,"text":827},{"id":902,"depth":937,"text":903,"children":1672},[1673,1674],{"id":909,"depth":943,"text":910},{"id":1178,"depth":943,"text":1179},{"id":1330,"depth":937,"text":1331,"children":1676},[1677,1678,1679],{"id":1334,"depth":943,"text":1335},{"id":1423,"depth":943,"text":1424},{"id":1462,"depth":943,"text":1463},{"id":1590,"depth":937,"text":1591,"children":1681},[1682,1683,1684],{"id":1597,"depth":943,"text":1598},{"id":1617,"depth":943,"text":1618},{"id":1627,"depth":943,"text":1628},"md",null,{},{"title":208,"description":924},"J4ujV92I5l5WXyEBexqRXVc4JOxq2WtwoCInzmjv3po",[1691,1692],{"title":204,"path":205,"stem":206,"description":924,"children":-1},{"title":204,"path":214,"stem":215,"description":1693,"children":-1},"Este é um excelente tema para um Projeto Integrador, pois une a lógica de programação de algoritmos de segurança com a persistência de dados e o desenvolvimento web, seguindo o padrão de stacks que você costuma lecionar e desenvolver (Python, Flask e MySQL).",1788375147003]